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

#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];

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容