作者 | 街角仰望 责编 | 欧阳姝黎
方案一
自定义UINavigationController
遵守 UINavigationBarDel 协议
实现下面方法:
#pragmamark---------UINavigationBarDelegate-(BOOL)navigationBar:(UINavigationBar*)navigationBarshouldPushItem:(UINavigationItem*)item{//设置导航栏返回按钮文字UIBarButtonItem*back=[[UIBarButtonItemalloc]initWithTitle:nilstyle:UIBarButtonItemStylePlaintarget:nilaction:nil];/*NSMutableDictionary*textAttrs=[NSMutableDictionarydictionary];textAttrs[UITextAttributeTextColor]=[UIColorwhiteColor];[backsetTitleTextAttributes:textAttrsforState:UIControlStateNormal];*/item.backBarButtonItem=back;returnYES;}
❝注意:该方法会出现部分子控制器页面的返回按钮文字出现的bug,需要在其子控制器页面的父控制器里再次如上设置返回按钮才行
子控制器页面的父控制器#pragmamark--------生命周期函数-(void)viewDidLoad{[superviewDidLoad];//Doanyadditionalsetupafterloadingtheview.self.view.backgroundColor=[UIColorwhiteColor];//重新设置下级子页面导航栏返回按钮文字UIBarButtonItem*item=[[UIBarButtonItemalloc]initWithTitle:nilstyle:UIBarButtonItemStylePlaintarget:nilaction:nil];self.navigationItem.backBarButtonItem=item;}
方案二
自定义UINavigationController
遵守<UINavigationBarDelegate>协议
实现下面方法:
#pragmamark---------UINavigationBarDelegate-(BOOL)navigationBar:(UINavigationBar*)navigationBarshouldPushItem:(UINavigationItem*)item{//设置导航栏返回按钮文字为透明的,可能造成导航标题不居中的问题[[UIBarButtonItemappearance]setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColorclearColor]}forState:UIControlStateNormal];[[UIBarButtonItemappearance]setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColorclearColor]}forState:UIControlStateHighlighted];returnYES;}
方案三(推荐)
给UIViewController添加类别(这里的类别不需要导入可直接使用)
然后在load方法里面用Method Swzilling方法替换交换ViewDidAppear方法,代码如下:
#import"UIViewController+HideNavBackTitle.h"#import<objc/runtime.h>@implementationUIViewController(HideNavBackTitle)+(void)load{swizzleMethod([selfclass],@selector(viewDidAppear:),@selector(ac_viewDidAppear));}//设置导航栏返回按钮文字-(void)ac_viewDidAppear{self.navigationItem.backBarButtonItem=[[UIBarButtonItemalloc]initWithTitle:@""style:UIBarButtonItemStylePlaintarget:selfaction:nil];[selfac_viewDidAppear];}voidswizzleMethod(Classclass,SELoriginalSelector,SELswizzledSelector){//themethodmightnotexistintheclass,butinitssuperclassMethodoriginalMethod=class_getInstanceMethod(class,originalSelector);MethodswizzledMethod=class_getInstanceMethod(class,swizzledSelector);//class_addMethodwillfailiforiginalmethodalreadyexistsBOOLdidAddMethod=class_addMethod(class,originalSelector,method_getImplementation(swizzledMethod),method_getTypeEncoding(swizzledMethod));//themethoddoesn’texistandwejustaddedoneif(didAddMethod){class_replaceMethod(class,swizzledSelector,method_getImplementation(originalMethod),method_getTypeEncoding(originalMethod));}else{method_exchangeImplementations(originalMethod,swizzledMethod);}}@end
生于2001年的《程序员》曾陪伴了无数开发者成长,影响了一代又一代的中国技术人。时隔,《新程序员》带着全球技术大师深邃思考、优秀开发者技术创造等深度内容回来了!同时将全方位为所有开发者呈现国内外核心技术生态体系全景图。扫描下方小程序码即可立即订阅!