美文网首页
重写系统侧滑返回到栈中界面导致滑动视图不能滑动视图

重写系统侧滑返回到栈中界面导致滑动视图不能滑动视图

作者: 不懂冯先生 | 来源:发表于2017-09-01 17:20 被阅读25次

    项目里面有个需求, 需要重写系统侧滑, 返回过去的侧滑手势导致跟原界面tableView发生了手势冲突, tableView不能进行上下滑动

    UIScreenEdgePanGestureRecognizer 屏幕侧滑手势

    重写系统侧滑代码如下:
    首先遵循navigationController侧滑代理<UIGestureRecognizerDelegate>;

     self.navigationController.interactivePopGestureRecognizer.delegate = self;
    

    之后:

    - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer ;
    

    这个代理协议是: 手势刚开始发生时, 需不需要响应, 这里设置为NO。

    - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
    
       侧滑返回需要的需求action
        return NO;    
    }
    

    tableView也是一种滑动视图(UIScrollView), 默认遵循两种手势
    UIPanGestureRecognizer, UIPinchGestureRecognizer

    重写系统的侧滑返回到原界面之后, tableView发现滑动手势被禁止了, 那么这是由于系统的侧滑手势跟tableView自带手势冲突了, 导致tableview无法正常滑动!
    解决方案:

    //返回YES表示支持多个手势同时触发,否则不允许多个手势同时触发,  otherGestureRecognizer是UITableView的UIPanGestureRecognizer手势,  gestureRecognizer是UIScreenEdgePanGestureRecognizer
    - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
    // 也可以这种写法  [otherGestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]  
        if ([otherGestureRecognizer.view isKindOfClass:[UITableView class]]) {  
            return YES;  
        }  
        return NO;  
    }
    

    可能还有的朋友碰到也是在tableView上加tap手势导致cell点击手势无效
    解决办法如下:

    -(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
        if ([NSStringFromClass([touch.view class]) isEqualToString:@"UITableViewCellContentView"]) {//判断如果点击的是tableView的cell,就把手势给关闭了
            return NO;//关闭手势
        }//否则手势存在
        return YES;
    }
    

    PS: 日积月累, 天天进步!
    --END--

    相关文章

      网友评论

          本文标题:重写系统侧滑返回到栈中界面导致滑动视图不能滑动视图

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