美文网首页iOS酷玩技术分享iOS进阶指南移动开发
设置文本框不同状态下占位文字的颜色(怎么获取系统私有变量)

设置文本框不同状态下占位文字的颜色(怎么获取系统私有变量)

作者: 尕小天 | 来源:发表于2016-07-29 17:27 被阅读85次

    #1.为什么要设置占位颜色?

    项目需求    正常状态下和编辑状态下占位文字的颜色是不同的

    #2.怎么设置

    2.1 通过监听编辑状态改变      开始编辑改变颜色   结束编辑把颜色还原

    2.11 怎么监听文本框编辑状态?

    1. 代理         2.通知          3.target

    不能使用代理    代理就是有些事情自己不想做,让代理去做    自己做自己的代理 没意义

    通知,自己通知自己也没什么意义

    我们使用target

    // 监听文本框开始编辑

    [selfaddTarget:selfaction:@selector(textBegin)forControlEvents:UIControlEventEditingDidBegin];

    // 监听文本框结束编辑

    [selfaddTarget:selfaction:@selector(textEnd)forControlEvents:UIControlEventEditingDidEnd];

    2.2 给哪个属性设置颜色

    1 我们先猜测placeholdercolor  敲不出来这个属性,说明没有这个属性

    2 不过我们发现这个属性,attributedPlaceholder  字面意思是占位文字属性(就是富文本属性)

    3 我们尝试给这个属性赋值试试,这个属性需要一个NSAttributedString类型的字符串,我们就创建这样一个字符串给它

    这个类创建尝试使用类方法,有一个图文混排的类方法,不是我们需求的     那就通过alloc来创建

    4 创建字符串的时候 还需要一个字典,来描述属性,   属性key值在NSAttributedString头文件里面有

    // 描述字符串属性

    NSMutableDictionary*attr = [NSMutableDictionarydictionary];

    attr[NSForegroundColorAttributeName] = [UIColorlightGrayColor];

    // 创建属性字符串

    NSAttributedString*attrStr = [[NSAttributedStringalloc]initWithString:self.placeholderattributes:attr];

    // 设置占位文字属性字符串

    self.attributedPlaceholder= attrStr;

    2.3 怎么还原颜色?原来的颜色是什么颜色?

    原来的颜色可以用取色工具来拿

    还有一个方法,就是设置一个初始颜色,最后还原为这个初始颜色就可以了

    3.上面的方法设置太麻烦,有没有一个简单的方法来设置?

    3.1 尝试去找一个属性,来直接设置, 就像设置View的颜色那样

    3.2 占位文字能显示出来,那它一定是一个控件,   是什么控件呢?

    猜测是label

    3.3 怎么验证?

    通过模拟器的小面包可以查看  验证就是label

    3.4 怎么拿到这个label?

    通过属性名

    3.5 用什么属性名

    去UITextField里面查找  label  发现找不到

    3.6 怎么办?

    思考:系统是不是没有把这个属性暴露出来,设为了私有属性

    3.7 怎么获取私有属性

    1 可以通过runtime

    2 还可以通过打断点的方式去获取  我们找到这个私有属性placeholderLabel

    通过kvc拿到这个属性的值   然后给这个值设置颜色

    // 获取占位文字label

    UILabel*placeholderLabel = [selfvalueForKey:@"placeholderLabel"];

    placeholderLabel.textColor= [UIColorlightGrayColor];

    相关文章

      网友评论

        本文标题:设置文本框不同状态下占位文字的颜色(怎么获取系统私有变量)

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