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