#1.为什么要设置占位颜色?
项目需求 正常状态下和编辑状态下占位文字的颜色是不同的
#2.怎么设置
2.1 通过监听编辑状态改变 开始编辑改变颜色 结束编辑把颜色还原
2.11 怎么监听文本框编辑状态?
1. 代理 2.通知 3.target
不能使用代理 代理就是有些事情自己不想做,让代理去做 自己做自己的代理 没意义
通知,自己通知自己也没什么意义
我们使用target
// 监听文本框开始编辑
[selfaddTarget:selfaction:@selector(textBegin)forControlEvents:UIControlEventEditingDidBegin];
// 监听文本框结束编辑
[selfaddTarget:selfaction:@selector(textEnd)forControlEvents:UIControlEventEditingDidEnd];
2.2 给哪个属性设置颜色
1 我们先猜测placeholdercolor 敲不出来这个属性,说明没有这个属性
2 不过我们发现这个属性,attributedPlaceholder 字面意思是占位文字属性(就是富文本属性)
3 我们尝试给这个属性赋值试试,这个属性需要一个NSAttributedString类型的字符串,我们就创建这样一个字符串给它
这个类创建尝试使用类方法,有一个图文混排的类方法,不是我们需求的 那就通过alloc来创建
4 创建字符串的时候 还需要一个字典,来描述属性, 属性key值在NSAttributedString头文件里面有
// 描述字符串属性
NSMutableDictionary*attr = [NSMutableDictionarydictionary];
attr[NSForegroundColorAttributeName] = [UIColorlightGrayColor];
// 创建属性字符串
NSAttributedString*attrStr = [[NSAttributedStringalloc]initWithString:self.placeholderattributes:attr];
// 设置占位文字属性字符串
self.attributedPlaceholder= attrStr;
2.3 怎么还原颜色?原来的颜色是什么颜色?
原来的颜色可以用取色工具来拿
还有一个方法,就是设置一个初始颜色,最后还原为这个初始颜色就可以了
3.上面的方法设置太麻烦,有没有一个简单的方法来设置?
3.1 尝试去找一个属性,来直接设置, 就像设置View的颜色那样
3.2 占位文字能显示出来,那它一定是一个控件, 是什么控件呢?
猜测是label
3.3 怎么验证?
通过模拟器的小面包可以查看 验证就是label
3.4 怎么拿到这个label?
通过属性名
3.5 用什么属性名
去UITextField里面查找 label 发现找不到
3.6 怎么办?
思考:系统是不是没有把这个属性暴露出来,设为了私有属性
3.7 怎么获取私有属性
1 可以通过runtime
2 还可以通过打断点的方式去获取 我们找到这个私有属性placeholderLabel
通过kvc拿到这个属性的值 然后给这个值设置颜色
// 获取占位文字label
UILabel*placeholderLabel = [selfvalueForKey:@"placeholderLabel"];
placeholderLabel.textColor= [UIColorlightGrayColor];
网友评论