如何更改 UITextField 的占位符颜色?

Posted

技术标签:

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

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

- (void)drawPlaceholderInRect:(CGRect)rect

还有:

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

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

【问题讨论】:

【参考方案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]];

【讨论】:

以上是关于如何更改 UITextField 的占位符颜色?的主要内容,如果未能解决你的问题,请参考以下文章

使用用户属性更改 UITextField 的占位符文本颜色?

UISearchBar 更改占位符颜色

UITextField 无法将占位符居中并更改键盘颜色书写

UITextField 占位符颜色

使用 Swift 更改占位符文本颜色

有没有办法用 UIAppearance 设置 UITextField 的占位符颜色