iOS 重寫UILabel的text屬性

由於項目中臨時變更對所有的UILabel的文字要做表情兼容,所以採用次方是,請看代碼:

 

//重寫initialize

+ (void)initialize

{

    // 獲取到UILabel中setText對應的method

    Method setText =class_getInstanceMethod([UILabel class], @selector(setText:));

    Method setTextMySelf =class_getInstanceMethod([self class],@selector(setTextHooked:));

    

    // 將目標函數的原實現綁定到setTextOriginalImplemention方法上

    IMP setTextImp =method_getImplementation(setText);

    class_addMethod([UILabel class], @selector(setTextOriginal:), setTextImp,method_getTypeEncoding(setText));

    

    //然後用我們自己的函數的實現,替換目標函數對應的實現

    IMP setTextMySelfImp =method_getImplementation(setTextMySelf);

    class_replaceMethod([UILabel class], @selector(setText:), setTextMySelfImp,method_getTypeEncoding(setText));

    

}

 

 

- (void)setTextHooked:(NSString *)string

{

    

    //    //在這裏插入過濾算法

    //    string = [stringstringByReplacingOccurrencesOfString:@"

    //              " withString:@"\r\n"];

    

    // do something what ever youwant

  

    string = App_EmojiCheatUniCode(string);

    

    // invoke originalimplemention

    [self performSelector:@selector(setTextOriginal:) withObject:string];

    

}

 

#define App_EmojiCheatUniCode(str)  [App_ShowString(str) jk_stringByReplacingEmojiCheatCodesWithUnicode]

#define App_ShowString(str) (App_IsEmpty(str)?@"":str)

 

jk_stringByReplacingEmojiCheatCodesWithUnicode方法請查看  JXCategoryView ,在gitHub搜索即可查到。

 

發佈了58 篇原創文章 · 獲贊 27 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章