iOS7+自定义返回按钮

本来我是用创建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];

显示效果如下:

iOS7+自定义返回按钮



你可能感兴趣的:(iOS7+自定义返回按钮)