iOS开发-获取私有成员变量

作者: JollyJerry | 来源:发表于2017-06-10 15:32 被阅读65次

Xcode中提供的基本框架 UIKit是不开源的,我们能看到的基本控件的成员变量都是@public--共有的,一些私有的成员变量@private我们是看不到的;</br>
举个例子:UITextField中的属性有哪些呢?</br>

Snip20170609_1.png
图片中展示的是一部分共有的属性,已经非常的齐全,供我们平时开发使用,但是,众所周知,UITextField有一个功能是设置背景文字—— Snip20170609_2.png

如果这个时候有一个需求:改变背景文字的颜色如何做呢?
方法有几种:
方法一:<a>富文本技术</a> ---- 这个技术下次再说;
方法二:<a>用UITextField自身属性设置</a> -----今天写一个

<h6>今天重点说一下如果获取UITextField中私有的变量:</h6>
> 能够拿到的成员变量已经在图中了,自己去找吧,没有设置背景文字颜色的!

很明确的告诉大家,UITextField中有设置背景文字颜色的属性!</br>

<pre>
// 调用本类的时候,只会调用一次
+(void)initialize {
unsigned int count = 0;
// 获取私有成员变量列表
Ivar *ivars = class_copyIvarList([UITextField class], &count);
// 遍历私有成员变量
for (int i = 0; i < count; i++) {
// 获取私有成员变量地址并赋值
Ivar ivar = *(ivars + i);
// 打印出相应的成员变量
NSLog(@"%s",ivar_getName(ivar));
}
}
</pre>

其中我们会发现

Snip20170609_3.png

<pre>>可以通过<code>_placeholderLabel.color</code>设置背景文字的颜色</pre>

<blockquote>能够获取到相应的私有成员变量,具体设置如下:</blockquote>
<pre><code>[self setValue:[UIColor redColor] forKeyPath:@"_placeholderLabel.textColor"];</code></pre>

运行结果:


Snip20170609_5.png

相关文章

网友评论

    本文标题:iOS开发-获取私有成员变量

    本文链接:https://www.haomeiwen.com/subject/vedfqxtx.html