2018年5月15日星期二
越來越久沒寫東西了,一方面是感覺干的事情有點類似于簡單的搬磚砌墻,是體力活動沒啥好吹噓的,一方面是做完了這些體力活心理也沒啥想法当犯,今兒個閑著無事把之前在項目代碼里的設(shè)置字體部分高亮這個東西拿出來分享一下。老規(guī)矩直接上代碼割疾。
其實現(xiàn)是創(chuàng)建了一個UILabel的分類嚎卫,在里面用runtime的屬性方法設(shè)置兩個顏色,在重寫init方法宏榕,創(chuàng)建kvo監(jiān)聽'text','textColor','layoutSubviews'(這個屬性用來進(jìn)行優(yōu)化用拓诸,后面會講)。
- 當(dāng)字體設(shè)置的時候麻昼,字體顏色設(shè)置的時候奠支,這兩個屬性是可以分開設(shè)置的,無法判斷什么時候設(shè)置字體抚芦,什么時候設(shè)置字體顏色倍谜。當(dāng)時想著用分類實現(xiàn)這個方法的最大原因是迈螟,讓其用著和系統(tǒng)方法一樣,隨時設(shè)置其值尔崔,設(shè)置了之后都會生效井联,在設(shè)置的時候,可能使用者腦殼抽風(fēng)您旁,想在聲明之后任意地方設(shè)置高亮字體顏色,這就造成轴捎,可能在他設(shè)置字體顏色的時候鹤盒,并沒有text也沒有高亮的key。開始想的解決方案是去截取setText:方法侦副,在執(zhí)行這個方法的時候侦锯,替換成自己的方法,然后執(zhí)行完自己的方法秦驯,再替換成原來系統(tǒng)的方法尺碰,可惜該是邏輯沒梳理清楚,只做到了執(zhí)行了系統(tǒng)方法译隘,再替換成自己的方法亲桥,這個時候再替換成系統(tǒng)方法,已經(jīng)不執(zhí)行了(壯志未酬咯)固耘。
后面想著用KVO監(jiān)聽控件所有事件都展示完畢题篷,準(zhǔn)備顯示的上一步,類似于ViewController的ViewWillAppear... 因內(nèi)功有限厅目,知易行難番枚,我在此拋磚引玉,望各位大牛各抒己見损敷。不過這個功能類是已可以正常使用的葫笼,如何使用,點進(jìn)去看github拗馒。
對了 設(shè)置字體高亮使用的是NSMutableAttributedString屬性路星,所以照理說,只要是支持此屬性的控件都是可以使用的瘟忱。不過使用前奥额,把下面方法提取出來就行了
- (NSMutableAttributedString *)getAttrIbutedStrdistance:(NSString *)text1 textColor:(UIColor *)textColor DataKeyWorld:(NSMutableArray *)KeyWorld keyWorldColor:(UIColor *)keyWorldColor;