09-占位文字颜色

修改占位文字颜色有四种方法:

第一种:(最简单)一般用这个

修改内部占位文字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];
}

你可能感兴趣的:(09-占位文字颜色)