-
对placeholder的分析
-
随意创建一个UITextFiled, 然后通过打断点的方式, 在调试区查看TextFiled的内部属性(通常用这种方法偷看苹果隐藏起来的属性)
- 通过对属性的排查, 我们发现placeholder本质上就是一个UILabel, 这个隐藏的变量名称为
_placeholderLabel
- 而对于一个UILable, 我们都知道应该怎样修改他的字体颜色, 但是别忘了这个属性是水果隐藏起来的, 私有API, 正常情况下是不会让我们访问到的
- 因此我们就要使用苹果的黑魔法之一: KVC
- 通过对属性的排查, 我们发现placeholder本质上就是一个UILabel, 这个隐藏的变量名称为
-
KVC作为苹果的黑魔法之一, 平时最大的用处就是用来给变量赋值, 并且最nb的地方就在于他能访问到隐藏起来的私有变量: 来重温一下
setValue: forKeyPath:
的实现流程- 首先, 他会根据你所提供的Key, 去方法调用对象的内部, 需找是否有Key对应的setter方法, 如果有就直接调用方法给这个Key附上Value的值
- 如果没有setter方法, 就会查找有没有与Key名称相同的变量, 如果找到了, 就直接给这个变量赋值
- 如果没有找到Key的同名变量, 那么就会继续查找有没有与Key同名, 但是带下划线的成员变量, 即_Key, 如果找到了, 就直接赋值
- 如果此时还是没有找到的话, KVC就会调用
setValue: forUndefinedKey:
这个方法, 然后抛出异常, 程序崩溃 - 这里有一个小技巧, 我们经常使用字典数组给模型赋值, 然后转化为模型数组, 但是从服务器返回的所有数据, 我们并不需要每一个, 往往只是需要其中几个, 而这时使用KVC往往会出现问题, 这时我们可以重写
setValue: forUndefinedKey
这个方法但是不写任何实现, 这样我们就成功的干掉了系统的方法, 不让他再给我们抛出异常, 但强烈建议, 不要随便干掉系统的方法, 除非你知道自己在干什么
-
-
使用KVC来修改placeholder的颜色
-
一行代码搞定placeholder的颜色, 利用KVC来访问他的私有变量
[self setValue:[UIColor lightGrayColor] forKeyPath:@"_placeholderLabel.textColor"];
-
如果你想在UITextFiled编辑时, 编辑完成时展现不同的颜色, 就需要给TextFiled添加监听方法
UITextFiled属于UIControl的子类, 也就是说他可以使用[]addTarget: action: forControlEvent]这个方法来增加监听方法
监听开始编辑: UIControlEventEditingDidBegin
监听编辑结束: UIControlEventEditingDidEnd
-
为上面两个监听事件分别绑定不同的方法, 然后再使用KVC更改placeholder的颜色即可
- (void)awakeFromNib { // 默认情况下的颜色 [self setValue:[UIColor lightGrayColor] forKeyPath:@"_placeholderLabel.textColor"]; [self addTarget:self action:@selector(textBeginEdit) forControlEvents:UIControlEventEditingDidBegin]; [self addTarget:self action:@selector(textEndEdit) forControlEvents:UIControlEventEditingDidEnd]; } - (void)textBeginEdit { // 开始编辑时的颜色 [self setValue:[UIColor whiteColor] forKeyPath:@"_placeholderLabel.textColor"]; } - (void)textEndEdit { // 结束编辑时的颜色 [self setValue:[UIColor lightGrayColor] forKeyPath:@"_placeholderLabel.textColor"]; }
-
更改UITextFiled中placeholder的颜色
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 占位文字1、曾经有个这么一个项目需求: 使用textField时,占位文字默认是黑色的,我们的需求是当开始编辑时,...
- 最近有一个需求: 需要改变UITextField 的 placeholder的颜色和字体大小,我找了一些方法 总结...