iOS 自定义UITextField placeholder文字属性与光标颜色

一、简单设置

placeholder,输入框的占位符,其文字可以直接设置
tf.placeholder = @"占位符";

光标颜色可以也可以直接设置
tf.tintColor = [UIColor whiteColor];

二、还是简单设置

设置placeholder占位符的颜色

1、通过富文本设置

// 通过富文本设置占位符字体颜色
NSMutableDictionary * attributeDic = [NSMutableDictionary new];
attributeDic[NSForegroundColorAttributeName] = [UIColor whiteColor];
tf.attributedPlaceholder = [[NSAttributedString alloc]initWithString:self.placeholder attributes:attributeDic];

2、通过kvc设置

// 通过kvc获得UITextField的UIPlaceHolderLabel(父类私有属性)属性
UILabel *label = [self valueForKey:@"placeholderLabel"];
label.textColor = [UIColor grayColor];
tf.placeholderColor = label.textColor;
 // 这个是上面的简写 
[tf setValue:[UIColor grayColor] forKeyPath:@"placeholderLabel.textColor"];

三、简单设置 动态改变placeholder字体颜色

就像这样


光标.gif

这需要监听UITextField的编辑状态。
需要清楚,textfield的结构。通过debug view hierarchy模式可以看到,UITextField上是有一层UITextFieldLabel控件的,但该控件是其系统私有控件,我们无法直接使用。但可以通过kvc去直接赋值。


WechatIMG1.jpeg

三个方法:

1、利用添加事件来监视textfield的编辑状态(这个好用)

// 开始编辑
[tf addTarget:self action:@selector(eventEditingDidBegin) forControlEvents:UIControlEventEditingDidBegin];
// 结束编辑
[tf addTarget:self action:@selector(eventEditingDidEnd) forControlEvents:UIControlEventEditingDidEnd];
// 开始编辑 变白
- (void)eventEditingDidBegin{
    [tf setValue:[UIColor whiteColor] forKey:@"placeholderLabel.textColor"];
}
// 结束编辑 变灰
- (void)eventEditingDidEnd {
    [tf setValue:[UIColor grayColor] forKey:@"placeholderLabel.textColor"];
}

2、通过 通知 来监听 (也好用)

我这个是自定义的UITextField,所以观察者和对象都是self

// 监听开始编辑
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(eventEditingDidBegin) name:UITextFieldTextDidBeginEditingNotification object:self];
// 监听编辑结束
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(eventEditingDidEnd) name:UITextFieldTextDidEndEditingNotification object:self];

还是调用上面那俩方法

// 开始编辑 变白
- (void)eventEditingDidBegin{
    [tf setValue:[UIColor whiteColor] forKey:@"placeholderLabel.textColor"];
}
// 结束编辑 变灰
- (void)eventEditingDidEnd {
    [tf setValue:[UIColor grayColor] forKey:@"placeholderLabel.textColor"];
}

3、利用UITextfield的代理

这个在自定义的textfield里面不能用,因为要设置自己为自己的代理
self.delegate = self;
如果外界也使用这个自定义textfield的时候,如果用到代理UITextFieldDelegate,就会调用self.delegate = self;,把代理换掉。切记切记!

- (void)textFieldDidBeginEditing:(UITextField *)textField{
      [tf setValue:[UIColor whiteColor] forKey:@"placeholderLabel.textColor"];
}
- (void)textFieldDidEndEditing:(UITextField *)textField{
     [tf setValue:[UIColor grayColor] forKey:@"placeholderLabel.textColor"];
}

你可能感兴趣的:(iOS 自定义UITextField placeholder文字属性与光标颜色)