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