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

Xcode中提供的基本框架 UIKit是不开源的,我们能看到的基本控件的成员变量都是@public--共有的,一些私有的成员变量@private我们是看不到的;

举个例子:UITextField中的属性有哪些呢?

iOS开发-获取私有成员变量_第1张图片
Snip20170609_1.png

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

Snip20170609_2.png

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

今天重点说一下如果获取UITextField中私有的变量:

> 能够拿到的成员变量已经在图中了,自己去找吧,没有设置背景文字颜色的!

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


// 调用本类的时候,只会调用一次
+(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));
}
}

其中我们会发现

iOS开发-获取私有成员变量_第2张图片
Snip20170609_3.png

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

能够获取到相应的私有成员变量,具体设置如下:

[self setValue:[UIColor redColor] forKeyPath:@"_placeholderLabel.textColor"];

运行结果:


Snip20170609_5.png

你可能感兴趣的:(iOS开发-获取私有成员变量)