UINavigationController侧滑返回卡死问题

起初为了满足设计要求,自定义了导航栏的self.navigationItem.leftBarButtonItem

然后发现UINavigationController自带的侧滑返回消失了;

于是我以为这很简单,遵守UIGestureRecognizerDelegate协议,

然后:

self.navigationController.interactivePopGestureRecognizer.delegate=self;

 self.navigationController.interactivePopGestureRecognizer.enabled = YES;

这样解决了侧滑返回的问题,本以为问题就这样简单搞定了,没想到出了一个让我头疼好几天才找出原因的bug,简直就是自己给自己挖了一个大坑。

在rootViewController侧滑后,程序就开始出现莫名其妙的bug,点击按钮无法触发事件,或者反应很长时间,点一下,卡半天,最终卡死不动。

找过很多地方的问题,都不能解决这个问题。最终找到一个方法,自定义一个navigationController作为rootViewController。

代码如下:

需要遵守:UINavigationControllerDelegate,UIGestureRecognizerDelegate协议

- (void)viewDidLoad {

                 [superviewDidLoad];

                  self.delegate=self;

                    __weaktypeof(self)weakSelf =self;

if([selfrespondsToSelector:@selector(interactivePopGestureRecognizer)]) {

self.interactivePopGestureRecognizer.enabled=YES;

self.interactivePopGestureRecognizer.delegate= weakSelf;

}

}

在推出新视图之前停用手势。

-(void)pushViewController:(UIViewController*)viewController animated:(BOOL)animated{

if([selfrespondsToSelector:@selector(interactivePopGestureRecognizer)]) {

self.interactivePopGestureRecognizer.enabled=NO;

}

[superpushViewController:viewControlleranimated:animated];

}

新视图加载完成后启用手势

-(void)navigationController:(UINavigationController*)navigationController didShowViewController:(UIViewController*)viewController animated:(BOOL)animated{

if([navigationControllerrespondsToSelector:@selector(interactivePopGestureRecognizer)]) {

navigationController.interactivePopGestureRecognizer.enabled=YES;

}

一般根控制器都是禁止右滑返回的,所以设置第一个控制器停用手势。

if(navigationController.viewControllers.count==1) {

navigationController.interactivePopGestureRecognizer.enabled=NO;

navigationController.interactivePopGestureRecognizer.delegate=nil;

}

}

如果暂时理解不了的话,照搬就行,能解决问题,我也是打算把代码存在这里以后常翻一下。如果发现有不足的地方,请在评论里指正,谢谢~!

你可能感兴趣的:(UINavigationController侧滑返回卡死问题)