无标题文章

2017-02-16  本文已影响6人  唯一的信仰

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;

}

上一篇下一篇

猜你喜欢

热点阅读