解决UITapGestureRecognizer手势与UITableView的点击事件的冲突
UITableView 拥有属于自己的点击事件, 在将一个UITableView放在其它视图上, 并且其它视图需要添加手势进行操作的情况下, 我们会发现我们点击UITableView的cell的时候, 并没有触发方法:
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;
而是直接进入到了手势的方法中。 这是由于手势的冲突引起的,
解决方法是调用UIGestureRecognizer的方法:
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch;
在此方法中, 我们可以截获所点击的视图, 并决定是否手势继续向下响应:
我们可以根据UITableView的触摸来判断:
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
if ([NSStringFromClass([touch.view class]) isEqual:@"UITableViewCellContentView"]) {
return NO;
}
return YES;
}
也可以根据 添加手势的View来判定:
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
if ([touch.view isKindOfClass:[UIScrollView class]]) {
return YES;
}
return NO;
}