關(guān)于用runTime實現(xiàn)改變項目里面字體

本人項目已經(jīng)更新了快2年了,突然要求更改app里面的字體蛹稍,如果按照傳統(tǒng)的方式一個一個label吧黄,button,textfield等等通過font來改變那么我就要吐血了唆姐,想到了用runTime來改變初始化方法拗慨。我覺得這個是最方便的方式來。

先上代碼奉芦,然后和大家說說我入過的坑赵抢。

+ (void)load {
    [super load];
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        
        //改變init方法
        SEL origialSEL1        = @selector(init);
        SEL swizzledSEL1       = @selector(LY_init);
        [self swizzledMethodWithOriginalSEL:origialSEL1 withSwizzledSEL:swizzledSEL1];
        
        //改變initWithFrame方法
        SEL origialSEL2        = @selector(initWithFrame:);
        SEL swizzledSEL2       = @selector(LY_initWithFrame:);
        [self swizzledMethodWithOriginalSEL:origialSEL2 withSwizzledSEL:swizzledSEL2];
       
        //改變awakeFromNib方法
        SEL origialSEL3        = @selector(awakeFromNib);
        SEL swizzledSEL3       = @selector(LY_awakeFromNib);
        [self swizzledMethodWithOriginalSEL:origialSEL3 withSwizzledSEL:swizzledSEL3];
        
    });
}

+ (void)swizzledMethodWithOriginalSEL:(SEL)originalSEL withSwizzledSEL:(SEL)swizzledSEL {
    
    Class class = [self class];
    Method originalMethod = class_getInstanceMethod(class, originalSEL);
    Method swizzledMethod = class_getInstanceMethod(class, swizzledSEL);
    BOOL didAddMethod = class_addMethod(class, originalSEL, method_getImplementation(swizzledMethod), method_getTypeEncoding(swizzledMethod));
    if (didAddMethod) {
        class_replaceMethod(class, swizzledSEL, method_getImplementation(originalMethod), method_getTypeEncoding(originalMethod));
    } else {
        method_exchangeImplementations(originalMethod, swizzledMethod);
    }
    
}


- (instancetype)LY_init
{
    id __self = [self LY_init];
    if (__self) {
        
    }
    return __self;
}


- (instancetype)LY_initWithFrame:(CGRect)frame
{
    id __self = [self LY_initWithFrame:frame];
    if (self) {
        
    }
    return __self;
}

- (void)LY_awakeFromNib {
    [self LY_awakeFromNib];
    
}

先給大家講解一下代碼,+ (void)load{}這個方法是在加載label之前就運行這個方法的声功,這個方法是在main函數(shù)之前走的烦却,為了保證方法交換只走一次,所以用了一個dispatch_once先巴,而在下面的三個方法里面其爵,大家可以看到在初始化的時候,比如在LY_init方法里面是這么初始化的:id __self = [self LY_init];有的童鞋會說這不是在本類里面調(diào)用自己伸蚯,那不是死循環(huán)了么摩渺,大家要記住這個地方方法名稱已經(jīng)交換了,所以[self LY_init]這個地方實際上指向的是系統(tǒng)的init方法剂邮。這個地方一定要注意证逻。。抗斤。

以下是我進(jìn)的坑囚企,很多。瑞眼。龙宏。。
首先在class這個地方伤疙,我剛開始用的是Class class = object_getClass((id)self); 然后發(fā)現(xiàn)拿到的method為空银酗,后來看資料才發(fā)現(xiàn)如果是類方法是用這個拿class 實例方法要用 Class class = [self class];在一個就是Method originalMethod = class_getInstanceMethod(class, originalSEL);在拿到method的時候我用的也是類方法class_getClassMethod辆影。
大家做的時候一定要注意是類方法還是實例方法。黍特。蛙讥。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市灭衷,隨后出現(xiàn)的幾起案子次慢,更是在濱河造成了極大的恐慌,老刑警劉巖翔曲,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件迫像,死亡現(xiàn)場離奇詭異,居然都是意外死亡瞳遍,警方通過查閱死者的電腦和手機(jī)闻妓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來掠械,“玉大人由缆,你說我怎么就攤上這事』伲” “怎么了均唉?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長婚夫。 經(jīng)常有香客問我浸卦,道長署鸡,這世上最難降的妖魔是什么案糙? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮靴庆,結(jié)果婚禮上时捌,老公的妹妹穿的比我還像新娘。我一直安慰自己炉抒,他們只是感情好奢讨,可當(dāng)我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著焰薄,像睡著了一般拿诸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上塞茅,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天亩码,我揣著相機(jī)與錄音,去河邊找鬼野瘦。 笑死描沟,一個胖子當(dāng)著我的面吹牛飒泻,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播吏廉,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼泞遗,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了席覆?” 一聲冷哼從身側(cè)響起史辙,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤奔垦,失蹤者是張志新(化名)和其女友劉穎栋猖,沒想到半個月后健霹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體临谱,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡捻激,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年季俩,在試婚紗的時候發(fā)現(xiàn)自己被綠了吕嘀。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片弯院。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡障斋,死狀恐怖纵潦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情垃环,我是刑警寧澤邀层,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站遂庄,受9級特大地震影響寥院,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜涛目,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一秸谢、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧霹肝,春花似錦估蹄、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至讯赏,卻和暖如春垮兑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背漱挎。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工系枪, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人识樱。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓嗤无,卻偏偏與公主長得像震束,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子当犯,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,927評論 2 355

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

  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉垢村,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 1,715評論 0 9
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)嚎卫,斷路器嘉栓,智...
    卡卡羅2017閱讀 134,657評論 18 139
  • 文中的實驗代碼我放在了這個項目中。 以下內(nèi)容是我通過整理[這篇博客] (http://yulingtianxia....
    茗涙閱讀 923評論 0 6
  • Swift2.0 1.defer譯為延緩拓诸、推遲之意類似棧 注意作用域侵佃,其次是調(diào)用順序——即一個作用域結(jié)束(注意),...
    zeqinjie閱讀 3,378評論 0 50
  • 以后在凌晨之前睡覺奠支!不再熬夜馋辈。做更好的自己!
    Miss_姝閱讀 47評論 0 0