UITapGestureRecognizer手势与UITableView冲突解决

解决UITapGestureRecognizer手势与UITableView的点击事件的冲突


UITableView 拥有属于自己的点击事件, 在将一个UITableView放在其它视图上, 并且其它视图需要添加手势进行操作的情况下, 我们会发现我们点击UITableViewcell的时候, 并没有触发方法:

-(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;

}

猜你喜欢

转载自blog.csdn.net/haifangnihao/article/details/79743196