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

时间:2012-03-28 19:25:14

标签: iphone objective-c colors uitextfield placeholder

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

- (void)drawPlaceholderInRect:(CGRect)rect

还有:

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

但没有任何反应......仍然是同样的灰色......也许我必须继承一些东西,我不知道......有什么建议吗?

3 个答案:

答案 0 :(得分:4)

最简单的方法:

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

<强> [EDITED] 使用完之后我就知道了另一个错误,上面做了这个工作,但它也将我视图中所有其他标签的颜色重置为Default Black。然后为了解决这个问题,我不得不对UILabel类进行子类化,并在我的视图中使用我的类在所有其他标签中。

答案 1 :(得分:1)

请参阅drawPlaceholderInRect:的{​​{1}}。您需要子类化UITextField并覆盖此方法以使用所需的文本颜色配置图形上下文并调用超级实现。

  

调用此方法时,当前的图形上下文是   已经配置了默认环境和文本颜色   画画。在重写方法中,您可以配置当前   进一步上下文然后调用super来做实际的绘图或者做   画自己。如果你自己渲染文本,你应该   不要调用超级。

答案 2 :(得分:0)

从iOS6开始,您可以使用属性占位符:

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