一、简单设置
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的代理<UITextFieldDelegate>
这个在自定义的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"];
}
网友评论