修改占位文字颜色有四种方法:
第一种:(最简单)一般用这个
修改内部占位文字Label的文字颜色
[textField setValue:[UIColor grayColor] forKeyPath:@"placeholderLabel.textColor"];
第二种:使用attributedPlaceholder
// 设置占位文字内容
@property(nullable, nonatomic,copy) NSString *placeholder;
// 设置带有属性的占位文字, 优先级 > placeholder
@property(nullable, nonatomic,copy) NSAttributedString *attributedPlaceholder;
// 设置占位文字颜色
NSMutableDictionary *attributes = [NSMutableDictionary dictionary];
attributes[NSForegroundColorAttributeName] = [UIColor whiteColor];
self.attributedPlaceholder = [[NSAttributedString alloc] initWithString:self.placeholder attributes:attributes];
第三种:重写- (void)drawPlaceholderInRect:(CGRect)rect;
第四种:利用分类为UITextField添加占位文字属性--->推荐,一劳永逸
注意:
问题:为什么要先确保有占位文字,再设置占位文字颜色?
结果:若先设置占位文字颜色,在设置占位文字,就会无效果。
原因:不设置文字,就不会创建label这个控件,那么占位文字也就拿不到了,又如何设置占位文字颜色呢.
/** 占位文字颜色 **/
@property (nonatomic ,strong) UIColor *placeholderColor;
#import "UITextField+ZSExtension.h"
static NSString *const ZSPlaceholderColorKey = @"placeholderLabel.textColor";
@implementation UITextField (ZSExtension)
-(void)setPlaceholderColor:(UIColor *)placeholderColor
{
// 点击时占位文字的显示
BOOL change = NO;
//保证有占位文字
if (self.placeholder == nil) {
self.placeholder = @"";
}
// 占位文字颜色
[self setValue:placeholderColor forKeyPath:ZSPlaceholderColorKey];
// 恢复原状
if (change) {
self.placeholderColor = nil;
}
}
-(UIColor *)placeholderColor
{
return [self valueForKeyPath:ZSPlaceholderColorKey];
}