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

问题描述:

我已经尝试了两种选择回答大家在这个论坛,但没有对我的作品。我曾尝试重写:如何更改UITextField的占位符颜色?

- (void)drawPlaceholderInRect:(CGRect)rect

也:

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

,但没有发生......仍是同样的灰色......也许我必须继承一些东西,我不知道......任何建议?

做到这一点最简单的方法:

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

将帖子 使用此之后,我认识了另一个错误,上面做的工作,但它也重置所有其他的颜色在我的视图中标记为默认黑色。然后为了克服这个问题,我不得不将子类UILabel类用于我的视图中的所有其他标签中。

+0

谢谢!还有一件事:是否可以更改编辑蓝色垂直条的颜色? – sergiocg90 2013-04-13 09:12:30

+0

不知道这个,但我想添加一些东西到上面的占位符工作。使用后我知道了另一个bug,上面做了这个工作,但它也将我视图中所有其他标签的颜色重置为Default Black。然后为了克服这个问题,我不得不将子类UILabel类用于我的视图中的所有其他标签中。 – 2013-04-13 20:39:33

请参阅drawPlaceholderInRect:UITextField。您需要继承UITextField并重写此方法以配置具有所需文本颜色和调用超级实现的图形上下文。

通过这种方法被调用的时候,当前图形上下文 已经配置了默认环境和文本颜色 图。在您重写的方法中,您可以进一步配置当前的 上下文,然后调用super来执行实际绘图或自己执行绘图。如果你自己渲染文本,你应该不会调用超级。

+0

谢谢你,现在我知道它是如何真正的作品 – sergiocg90 2012-03-28 19:54:23

从iOS6的,你可以使用归因占位符:

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