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

项目里面有个需求, 需要重写系统侧滑, 返回过去的侧滑手势导致跟原界面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--

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容