美文网首页
UINavigationController侧滑返回卡死问题

UINavigationController侧滑返回卡死问题

作者: lesmiserables0 | 来源:发表于2016-10-18 14:37 被阅读105次

    起初为了满足设计要求,自定义了导航栏的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侧滑返回卡死问题

          本文链接:https://www.haomeiwen.com/subject/iwctuttx.html