使用KVC模式来修改控件的内部属性是开发中必不可少的小技巧。众所周知很多UI控件都由很多内部UI控件组合而成的,但是Apple没有对外提供这访问这些控件的API,这样我们就无法正常地访问和修改这些控件的样式。而KVC在大多数情况可下可以解决这个问题。最常用的就是个性化UITextField中的placeHolderText了。下面演示如果修改placeHolder的文字样式。这里的关键点是如果获取你要修改的样式的属性名,也就是key或者keyPath名。
以UITextField控件为例来说说,首先要修改内部属性,我们得知道对应控件的内部私有属性有哪些,才能对应设置。
一.runtime获取UITextField的内部属性
(1)runtime获取内部隐藏属性,导入头文件#import<objc/runtime.h>
打印可以获取出所有的内部隐藏属性,
2017-09-14 16:25:55.140 FangXianyuTabbar[2080:222614] _displayLabel
2017-09-14 16:25:55.140 FangXianyuTabbar[2080:222614] _placeholderLabel
2017-09-14 16:25:55.142 FangXianyuTabbar[2080:222614] _overriddenPlaceholder
2017-09-14 16:25:55.142 FangXianyuTabbar[2080:222614] _overriddenPlaceholderAlignment
(2)使用KVC进行修改:setValue: forKeyPath方式
修改之后的结果如图:
二.补充runtime获取类的开放属性和方法