自定义文本框占位颜色和runtime

请耐心看完这篇文章,你会发现惊喜。当我看到这个需求的时候,首先脑海里就有个思路,既然和系统给的不一样,那肯定就要自定义了,最开始我并不知道怎么改,所以我点进去,UITextField类里面,既然是占位颜色,所以我就搜索place,就发现了


这两个属性,想都不用想,肯定我们对第二个属性进行操作,在这里牵扯到了小逻辑的处理,就是要监听开始编辑和结束编辑的状态,用什么监听呢?

开发中监听事件用到三种:1.代理 2.通知 3.target  

用代理?代理中有一个原则:永远不要自己成为自己的代理,我们在自定义的textField中设置代理这不搞笑呢,通知?跨多界面传值一般才用,所以这里用 target最合适


功能实现了,可是呢,作为开发人员,改个颜色写这么多代码有些不恰当吧,所以又想到了什么?是不是想到了给自定义的类添加一个placeholder的属性,给类添加属性,不错就是分类了。


分类中是有set和get方法的,只是没实现没有有带下划线的属性而已,写好以后,直接在自定义的类里面直接就

   self.lsPlacehoder = self.placeholder;

这样可否简单多了,但是还是有点遗憾,这样很不直观,不太能够读懂我们最希望的就是直接self.placeholder = [UIColor WhiteColor]这样是不是就简单粗暴了,

所以继续观察,占位文字猜测应该是一个label,我们使用


观察


这就是我们想要的控件UITextFieldLabel,所以我们确定了我们需要一个label的属性,点击进去看发现,苹果官方只是声明了一下,并没有给我们详细说明里面的属性,猜测是隐藏的私有属性,所以如何获得label的属性呢,这里用比较简单的方式打断点,runtime也能获得属性,但是太麻烦,而且什么都不知道的情况下不利于锁定,怎么简单怎么来


现在知道设置占位属性真正的label,是_placeholderLabel,所以获取这个label得用KVC

UILabel *placehoderlabel = [self valueForKey:@"placeholderLabel"];

    placehoderlabel.textColor = [UIColor lightGrayColor];

一点问题没有,这时候哈哈哈,可以在分类里写,外界可以直接设置颜色了

分类中


自定义textField类中


这样就可以了,但是呢小伙伴可以测试一下,这样写是有BUG的,经过测试发现我们只有先设置占位文字,后设置占位颜色才可以,调换顺序后是不行的,查询了一些解决方法,发现因为OC中控件都是懒加载,我们要想完美的解决这个问题,必须事先将占位颜色保存起来,等到用到的时候再去调用,想到这,给系统添加属性和方法第一个反应就是runtime运行时

做一个小测试



这样调用lsPlacehoder就可以实现设置文字和颜色无序了,可是这样调用不是我们的终极目标,我们希望直接调用placeholder直接设置,所以用runtime交换两个方法,


哈哈完美这样的话,我们不管怎么设置文字或者颜色,都可以设置上啦。


1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REaDME.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值