欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

iOS 11 使用兩種方法替換(Method Swizzling)去掉導(dǎo)航欄返回按鈕的文字

 更新時(shí)間:2018年05月07日 10:36:40   作者:星紅  
這篇文章主要介紹了iOS 11 使用方法替換(Method Swizzling)去掉導(dǎo)航欄返回按鈕的文字,需要的朋友可以參考下

  方法一:設(shè)置BarButtonItem的文本樣式為透明顏色,代碼如下:

[[UIBarButtonItem appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor clearColor]} forState:UIControlStateNormal]; 
[[UIBarButtonItem appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor clearColor]} forState:UIControlStateHighlighted]; 

   此外這種方法會(huì)導(dǎo)致title不能居中,被偏移很多,如下所示(雖然不被顯示,也占了導(dǎo)航欄左邊很大一部分位置)

     方法二:給UIViewController添加類(lèi)別,然后在load方法里面用Method Swzilling方法替換 交換ViewDidAppear,部分代碼如下

+(void)load {
  swizzleMethod([self class], @selector(viewDidAppear:), @selector(ac_viewDidAppear));
}
- (void)ac_viewDidAppear{
  self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc]
                       initWithTitle:@""
                       style:UIBarButtonItemStylePlain
                       target:self
                       action:nil];
  [self ac_viewDidAppear];
}
void swizzleMethod(Class class, SEL originalSelector, SEL swizzledSelector)
{
  // the method might not exist in the class, but in its superclass
  Method originalMethod = class_getInstanceMethod(class, originalSelector);
  Method swizzledMethod = class_getInstanceMethod(class, swizzledSelector);
  // class_addMethod will fail if original method already exists
  BOOL didAddMethod = class_addMethod(class, originalSelector, method_getImplementation(swizzledMethod), method_getTypeEncoding(swizzledMethod));
  // the method doesn't exist and we just added one
  if (didAddMethod) {
    class_replaceMethod(class, swizzledSelector, method_getImplementation(originalMethod), method_getTypeEncoding(originalMethod));
  }
  else {
    method_exchangeImplementations(originalMethod, swizzledMethod);
  }
}

注意事項(xiàng):

要給整個(gè)backButtonItem賦值才可以,👇這種方法不行,因?yàn)閎ackBarButtonItem默認(rèn)為空,給nil方法消息,默認(rèn)聲明都不執(zhí)行(參考官網(wǎng)

self.navigationItem.backBarButtonItem.title = @" ";

leftBarButtonItem 與backBarButtonItem 的顯示關(guān)系:

有l(wèi)eftBarButtonItem則優(yōu)先顯示當(dāng)前VC的leftBarButtonItem,無(wú)則顯示上個(gè)VC的backBarButtonItem,再無(wú)則顯示上個(gè)VC的title(參考官網(wǎng)   還是官網(wǎng)解釋的清楚)

總結(jié)

以上所述是小編給大家介紹的iOS 11 使用兩種方法替換(Method Swizzling)去掉導(dǎo)航欄返回按鈕的文字,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

最新評(píng)論