300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 去掉 iOS 导航栏返回按钮文本三种方案

去掉 iOS 导航栏返回按钮文本三种方案

时间:2018-10-22 14:25:36

相关推荐

去掉 iOS 导航栏返回按钮文本三种方案

作者 | 街角仰望 责编 | 欧阳姝黎

方案一

自定义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年的《程序员》曾陪伴了无数开发者成长,影响了一代又一代的中国技术人。时隔,《新程序员》带着全球技术大师深邃思考、优秀开发者技术创造等深度内容回来了!同时将全方位为所有开发者呈现国内外核心技术生态体系全景图。扫描下方小程序码即可立即订阅!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。