用runtime設(shè)置UIKit的所有控件的默認(rèn)樣式

最近項(xiàng)目中碰到UI給出的切圖中咏瑟,大部分Label的文本顏色都是 16進(jìn)制顏色#23b6bc,但是UILabel 控件默認(rèn)好像都是黑色還是什么顏色來(lái)著病蛉。當(dāng)時(shí)是想到了兩種解決方案。

1.自定義一個(gè)UILabel子類(lèi)称勋,在子類(lèi)中設(shè)置label的通用樣式昌妹,以后就用這個(gè)子類(lèi)去實(shí)例化使用即可。

2.用runtime 可以替換類(lèi)的init方法顷扩,再替換的init方法中設(shè)置一下空間的默認(rèn)樣式。這種方法感覺(jué)實(shí)用性更好一些慰毅。隘截。。

(1)新建一個(gè)UILabel的分類(lèi)汹胃,這里我命名UILabel+DefaultTextColor?

(2)建好分類(lèi)后婶芭,在分類(lèi)的.m文件中添加替換的方法

? /**

*在這些方法中將你的字體名字換進(jìn)去

*/

- (instancetype)ZpfDefInit

{

id__self = [selfZpfDefInit];

UIColor * textColor=GetJinZhiColor(@"#444444");

self.textColor=textColor;

return__self;

}

-(instancetype)ZpfDefBaseInitWithFrame:(CGRect)rect{

id__self = [selfZpfDefBaseInitWithFrame:rect];

UIColor * textColor=GetJinZhiColor(@"#444444");

self.textColor=textColor;

return__self;

}

-(void)ZpfDefBaseAwakeFromNib{

[selfZpfDefBaseAwakeFromNib];

UIColor * textColor=GetJinZhiColor(@"#444444");

self.textColor=textColor;

}

這三個(gè)方法分別用來(lái)替換init , initWithFrame , xib初始化方法统台。這樣使用的時(shí)候無(wú)論用哪個(gè)方法初始化都能夠設(shè)置自定義的樣式雕擂。

(3)最重要的方法,復(fù)寫(xiě)類(lèi)方法+(void)load ,這個(gè)方法是當(dāng)類(lèi)被加載時(shí)候調(diào)用的贱勃,在這個(gè)方法里進(jìn)行需要的方法替換即可井赌。

+(void)load{

//只執(zhí)行一次這個(gè)方法

staticdispatch_once_t onceToken;

dispatch_once(&onceToken, ^{

Class class = [selfclass];

// When swizzling a class method, use the following:

// Class class = object_getClass((id)self);

//替換三個(gè)方法

SELoriginalSelector =@selector(init);

SELoriginalSelector2 =@selector(initWithFrame:);

SELoriginalSelector3 =@selector(awakeFromNib);

SELswizzledSelector =@selector(ZpfDefInit);

SELswizzledSelector2 =@selector(ZpfDefBaseInitWithFrame:);

SELswizzledSelector3 =@selector(ZpfDefBaseAwakeFromNib);

Method originalMethod = class_getInstanceMethod(class, originalSelector);

Method originalMethod2 = class_getInstanceMethod(class, originalSelector2);

Method originalMethod3 = class_getInstanceMethod(class, originalSelector3);

Method swizzledMethod = class_getInstanceMethod(class, swizzledSelector);

Method swizzledMethod2 = class_getInstanceMethod(class, swizzledSelector2);

Method swizzledMethod3 = class_getInstanceMethod(class, swizzledSelector3);

BOOLdidAddMethod =

class_addMethod(class,

originalSelector,

method_getImplementation(swizzledMethod),

method_getTypeEncoding(swizzledMethod));

BOOLdidAddMethod2 =

class_addMethod(class,

originalSelector2,

method_getImplementation(swizzledMethod2),

method_getTypeEncoding(swizzledMethod2));

BOOLdidAddMethod3 =

class_addMethod(class,

originalSelector3,

method_getImplementation(swizzledMethod3),

method_getTypeEncoding(swizzledMethod3));

if(didAddMethod) {

class_replaceMethod(class,

swizzledSelector,

method_getImplementation(originalMethod),

method_getTypeEncoding(originalMethod));

}else{

method_exchangeImplementations(originalMethod, swizzledMethod);

}

if(didAddMethod2) {

class_replaceMethod(class,

swizzledSelector2,

method_getImplementation(originalMethod2),

method_getTypeEncoding(originalMethod2));

}else{

method_exchangeImplementations(originalMethod2, swizzledMethod2);

}

if(didAddMethod3) {

class_replaceMethod(class,

swizzledSelector3,

method_getImplementation(originalMethod3),

method_getTypeEncoding(originalMethod3));

}else{

method_exchangeImplementations(originalMethod3, swizzledMethod3);

}

});

}

(4)完成以上三步后,在appdelegate.m中引用分類(lèi)的頭文件 #import"UILabel+DefaultTextColor.h"


替換完以后贵扰,就能一勞永逸的設(shè)置通用的label樣式仇穗,而不需每次都調(diào)用label.textcolor方法去設(shè)置文本顏色,同理所有UIKit的控件戚绕,或是需要設(shè)置通用屬性的時(shí)候用這個(gè)方法就能達(dá)到效果

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末纹坐,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子舞丛,更是在濱河造成了極大的恐慌耘子,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,324評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件球切,死亡現(xiàn)場(chǎng)離奇詭異谷誓,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)吨凑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)捍歪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人鸵钝,你說(shuō)我怎么就攤上這事糙臼。” “怎么了恩商?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,328評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵变逃,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我怠堪,道長(zhǎng)揽乱,這世上最難降的妖魔是什么末患? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,147評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮锤窑,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘嚷炉。我一直安慰自己渊啰,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布申屹。 她就那樣靜靜地躺著绘证,像睡著了一般。 火紅的嫁衣襯著肌膚如雪哗讥。 梳的紋絲不亂的頭發(fā)上嚷那,一...
    開(kāi)封第一講書(shū)人閱讀 51,115評(píng)論 1 296
  • 那天,我揣著相機(jī)與錄音杆煞,去河邊找鬼魏宽。 笑死,一個(gè)胖子當(dāng)著我的面吹牛决乎,可吹牛的內(nèi)容都是我干的队询。 我是一名探鬼主播,決...
    沈念sama閱讀 40,025評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼构诚,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蚌斩!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起范嘱,我...
    開(kāi)封第一講書(shū)人閱讀 38,867評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤送膳,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后丑蛤,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體叠聋,經(jīng)...
    沈念sama閱讀 45,307評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評(píng)論 2 332
  • 正文 我和宋清朗相戀三年盏阶,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了晒奕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,688評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡名斟,死狀恐怖脑慧,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情砰盐,我是刑警寧澤闷袒,帶...
    沈念sama閱讀 35,409評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站岩梳,受9級(jí)特大地震影響囊骤,放射性物質(zhì)發(fā)生泄漏晃择。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評(píng)論 3 325
  • 文/蒙蒙 一也物、第九天 我趴在偏房一處隱蔽的房頂上張望宫屠。 院中可真熱鬧,春花似錦滑蚯、人聲如沸浪蹂。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,657評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)坤次。三九已至,卻和暖如春斥赋,著一層夾襖步出監(jiān)牢的瞬間缰猴,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,811評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工疤剑, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留滑绒,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,685評(píng)論 2 368
  • 正文 我出身青樓隘膘,卻偏偏與公主長(zhǎng)得像蹬挤,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子棘幸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)載:http://www.cocoachina.com/ios/20161102/17920.html 因?yàn)镺b...
    F麥子閱讀 668評(píng)論 0 1
  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉焰扳,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 1,709評(píng)論 0 9
  • 本文轉(zhuǎn)載自:http://yulingtianxia.com/blog/2014/11/05/objective-...
    ant_flex閱讀 758評(píng)論 0 1
  • 我們常常會(huì)聽(tīng)說(shuō) Objective-C 是一門(mén)動(dòng)態(tài)語(yǔ)言,那么這個(gè)「動(dòng)態(tài)」表現(xiàn)在哪呢误续?我想最主要的表現(xiàn)就是 Obje...
    Ethan_Struggle閱讀 2,192評(píng)論 0 7
  • 轉(zhuǎn)載:http://yulingtianxia.com/blog/2014/11/05/objective-c-r...
    F麥子閱讀 731評(píng)論 0 2