【问题标题】:How can I change the placeholder color of a UITextField?如何更改 UITextField 的占位符颜色?
【发布时间】:2012-04-12 10:44:56
【问题描述】:

我已经尝试了这个论坛中每个人都回答的两个选项,但对我没有任何作用...我试图覆盖:

- (void)drawPlaceholderInRect:(CGRect)rect

还有:

[self.myTextField setValue:[UIColor redColor] forKeyPath:@"_placeholderLabel.textColor"];

但是什么都没有发生...仍然是相同的灰色...也许我必须继承一些东西,我不知道...有什么建议吗?

【问题讨论】:

    标签: iphone objective-c colors uitextfield placeholder


    【解决方案1】:

    最简单的方法:

    UILabel *placeholderAppearance;
    if (@available(iOS 9, *)) {
        placeholderAppearance = [UILabel appearanceWhenContainedInInstancesOfClasses:@[[UITextField class]]];
    } else {
        placeholderAppearance = [UILabel appearanceWhenContainedIn:[UITextField class], nil];
    }
    placeholderAppearance.textColor = [UIColor redColor];
    

    [已编辑] 使用它后,我知道了另一个错误,上面的工作完成了,但它也将我视图中所有其他标签的颜色重置为默认黑色。然后为了克服这个问题,我不得不对 UILabel 类进行子类化,并在我认为的所有其他标签中使用我的类。

    【讨论】:

    • 谢谢!还有一件事:是否也可以更改编辑蓝色垂直条的颜色?
    • 不太了解,但我想在上述占位符工作中添加一些内容。使用它后,我知道了另一个错误,上面的工作完成了,但它也将我视图中所有其他标签的颜色重置为默认黑色。然后为了克服这个问题,我必须对 UILabel 类进行子类化,并在我认为的所有其他标签中使用我的类。
    【解决方案2】:

    参见UITextField 中的drawPlaceholderInRect:。您需要继承 UITextField 并覆盖此方法以使用所需的文本颜色配置图形上下文并调用超级实现。

    调用此方法时,当前图形上下文为 已经配置了默认环境和文本颜色 绘画。在您覆盖的方法中,您可以配置当前 进一步上下文,然后调用 super 进行实际绘图或执行 自己画的。如果你自己渲染文本,你应该 不调用 super。

    【讨论】:

      【解决方案3】:

      从 iOS6 你可以使用属性占位符:

      textfield.attributedPlaceholder = [[NSAttributedString alloc] initWithString:textfield.placeholder attributes:@{NSForegroundColorAttributeName: [UIColor redColor]}];
      

      【讨论】:

        猜你喜欢
        • 2010-11-23
        • 1970-01-01
        • 2014-06-12
        • 2013-09-12
        • 2019-10-09
        • 2014-01-31
        • 1970-01-01
        • 2011-09-03
        • 2011-11-11
        相关资源
        最近更新 更多