标签:
1\在实际编程过程中往往需要自定义导航栏上面的按钮,也就用:
- (instancetype)initWithCustomView:(UIView *)customView;
但用了这个方法后可能会导致iOS7,8的手势返回失效,解决方法就是在自定义的导航栏的viewDidLoad方法中添加如下代码
注意:只有用系统的导航栏,或者继承于系统的导航栏才可以用Push方法,并且自带返回手势.
- (void)viewDidLoad { [super viewDidLoad]; __weak typeof (self) weakSelf = self; //解决因为自定义导航栏按钮,滑动返回失效的问题 if ([self respondsToSelector:@selector(interactivePopGestureRecognizer)]) { self.interactivePopGestureRecognizer.delegate = weakSelf; } }
加了上面这一串代码后,再运行,返回手势就可以正常使用了.
2\另外再教大家一个实用的方法,当Push的多个界面的导航栏返回按钮相同时,可以在自定义的UINavigationController中重写Push的方法,拦截Push操作,
并同时设置push后的TabBar隐藏(如果有需要的话),代码如下:
/** * 重写这个方法目的:能够拦截所有push进来的控制器 * * @param viewController 即将push进来的控制器 */ - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated { if (self.viewControllers.count > 0) { // 这时push进来的控制器viewController,不是第一个子控制器(不是根控制器) /* 自动显示和隐藏tabbar */ viewController.hidesBottomBarWhenPushed = YES; /* 设置导航栏上面的内容 */ // 设置左边的返回按钮 viewController.navigationItem.leftBarButtonItem = [UIBarButtonItem itemWithTarget:self action:@selector(back) image:@"home_nav_bar_back_icon" highImage:@"home_nav_bar_back_icon"]; } [super pushViewController:viewController animated:animated]; } - (void)back { // 因为self本来就是一个导航控制器,self.navigationController这里是nil的 [self popViewControllerAnimated:YES]; }
实际iOS编程中遇到的自定义导航栏按钮,导致手势返回失效的解决方法
标签:
原文地址:http://www.cnblogs.com/CoderHJ/p/4726736.html