本来我是用创建UIButton赋值给self.navigationItem.leftBarButtonItem的方式设置返回按钮的,用了觉得挺正常,结果看了@蛙牛的文章《Java转iOS-第一个项目总结(2)》后,发现一个重大问题:手势返回功能没了,原因就是用设置leftBarButtonItem的方式来自定义返回按钮会导致手势返回功能失效。
如果不自定义返回按钮,又因为我使用的是RDVTabBarController,需要在返回方法里手动设置hide tabbar属性,这样我就需要拦截返回手势的触发方法,想起来头都大了。
摸索了半天,找到了一个简单自定义返回按钮并且保留手势返回功能的方法,优化一下hide tabbar的方式就可以不用拦截了。在BaseViewController中定义一个isShowTabBar,默认为NO,在一级页面的init或者initWithNibName方法中设置isShowTabBar=YES,其它的ViewController不用动,BaseViewController重写下面的方法:
- (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; if (self.rdv_tabBarController.isTabBarHidden == isShowTabbar) { [self.rdv_tabBarController setTabBarHidden:!isShowTabbar]; } }
自定义不带文字的返回按钮代码如下:(代码来自于自定义iOS7导航栏背景,标题和返回按钮文字颜色)
//自定义返回按钮 UIImage *backButtonImage = [[UIImage imageNamed:@"fanhui.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 30, 0, 0)]; [[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; //将返回按钮的文字position设置不在屏幕上显示 [[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(NSIntegerMin, NSIntegerMin) forBarMetrics:UIBarMetricsDefault];
显示效果如下:
时间: 2024-11-07 00:30:12