使用runtime機制全局修改navi的返回圖標

利用iOS的runtime機制的Method Swizzling替換系統(tǒng)的方法(iOS11.3之前有效)

創(chuàng)建一個UINavigationItem的類別,重寫+(void)load方法,記得在.m中引入#import<objc/runtime.h>,如果是使用storyboard創(chuàng)建的項目需要把BackBack Mask修改為你自己的圖片,下面代碼中實例化UIBarButtonItem的時候不填寫title的話就是沒有文字的返回按鈕了

+ (void)load
{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        
        Method originalMethodImp = class_getInstanceMethod(self, @selector(backBarButtonItem));
        Method destMethodImp = class_getInstanceMethod(self, @selector(myCustomBackButton_backBarbuttonItem));
        method_exchangeImplementations(originalMethodImp, destMethodImp);
    });
}

static char kCustomBackButtonKey;
- (UIBarButtonItem *)myCustomBackButton_backBarbuttonItem
{
    UIBarButtonItem *item = [self myCustomBackButton_backBarbuttonItem];
    
    if (item) {
        return item;
    }
    
    item = objc_getAssociatedObject(self, &kCustomBackButtonKey);
    if (!item) {
        
        item = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:NULL];
        objc_setAssociatedObject(self, &kCustomBackButtonKey, item, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    }
    return item;
}


- (void)dealloc
{
    objc_removeAssociatedObjects(self);
}

storyboard設置圖片如下:

07ECE35A-B58B-4624-A80C-D3627D9EAB5F.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 轉至元數(shù)據結尾創(chuàng)建: 董瀟偉,最新修改于: 十二月 23, 2016 轉至元數(shù)據起始第一章:isa和Class一....
    40c0490e5268閱讀 2,101評論 0 9
  • 這篇文章完全是基于南峰子老師博客的轉載 這篇文章完全是基于南峰子老師博客的轉載 這篇文章完全是基于南峰子老師博客的...
    西木閱讀 30,906評論 33 466
  • Swift版本點擊這里歡迎加入QQ群交流: 594119878最新更新日期:18-09-17 About A cu...
    ylgwhyh閱讀 26,290評論 7 249
  • 不管你承不承認,不管你面不面對,你已經活過21個年頭了,這個年紀的人,有的迷??菰铮械脑谡曳较蚰繕?,有的還在蹉跎...
    奤奤閱讀 244評論 0 1
  • 文/曲尚菇涼 01. 再一次見到蘇北時,是在多年后的同學聚會上。 那場聚會,我本意是不去的,但無奈在好友的再三催促...
    曲尚閱讀 1,079評論 28 22

友情鏈接更多精彩內容