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

2017-09-01  本文已影响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--

上一篇 下一篇

猜你喜欢

热点阅读