iOS手势与tableView点击事件冲突
问题描述:
当我们把一个tableView添加到一个View上,而该View又有其他点击手势,这是会出现手势的冲突——点击cell响应的是View的手势,而不是我们想要的cell的 didSelectRowAtIndexPath方法。
解决思路:
给view的点击手势设置代理,在gestureRecognizer : shouldReceiveTouch:方法中做判断,返回yes表示该手势有效,返回NO表示该手势无效,当点击cell时让View的点击手势无效,这时celldidSelectRowAtIndexPath方法就会有效。
解决办法:
方法一:判断点击的点是否在tableView内
//判断触摸点的位置,根据位置决定点击手势是否有效
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
//拿到触摸点
CGPoint point = [touch locationInView:self.bottomView];
//转换坐标系
CGPoint nPoint = [self.bottomView convertPoint:point toView:self.bottomView.tableView];
//判断转换坐标后的点的位置
return [self.bottomView.tableView pointInside:nPoint withEvent:nil] ? NO : YES;
}
方法二: 判断触摸事件的view的类型
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
if ([NSStringFromClass([touch.view class]) isEqualToString:@"UITableViewCellContentView"]) {
return NO;
}else {
return YES;
}
网友评论