2018年5月15日星期二
越来越久没写东西了,一方面是感觉干的事情有点类似于简单的搬砖砌墙,是体力活动没啥好吹嘘的,一方面是做完了这些体力活心理也没啥想法,今儿个闲着无事把之前在项目代码里的设置字体部分高亮这个东西拿出来分享一下。老规矩直接上代码。
其实现是创建了一个UILabel的分类,在里面用runtime的属性方法设置两个颜色,在重写init方法,创建kvo监听'text','textColor','layoutSubviews'(这个属性用来进行优化用,后面会讲)。
- 当字体设置的时候,字体颜色设置的时候,这两个属性是可以分开设置的,无法判断什么时候设置字体,什么时候设置字体颜色。当时想着用分类实现这个方法的最大原因是,让其用着和系统方法一样,随时设置其值,设置了之后都会生效,在设置的时候,可能使用者脑壳抽风,想在声明之后任意地方设置高亮字体颜色,这就造成,可能在他设置字体颜色的时候,并没有text也没有高亮的key。开始想的解决方案是去截取setText:方法,在执行这个方法的时候,替换成自己的方法,然后执行完自己的方法,再替换成原来系统的方法,可惜该是逻辑没梳理清楚,只做到了执行了系统方法,再替换成自己的方法,这个时候再替换成系统方法,已经不执行了(壮志未酬咯)。
后面想着用KVO监听控件所有事件都展示完毕,准备显示的上一步,类似于ViewController的ViewWillAppear... 因内功有限,知易行难,我在此抛砖引玉,望各位大牛各抒己见。不过这个功能类是已可以正常使用的,如何使用,点进去看github。
对了 设置字体高亮使用的是NSMutableAttributedString属性,所以照理说,只要是支持此属性的控件都是可以使用的。不过使用前,把下面方法提取出来就行了
- (NSMutableAttributedString *)getAttrIbutedStrdistance:(NSString *)text1 textColor:(UIColor *)textColor DataKeyWorld:(NSMutableArray *)KeyWorld keyWorldColor:(UIColor *)keyWorldColor;