iOS - 关于UIView中添加手势监听和tableView后,tableView的点击事件不执行问题

之前项目中遇到了一个BUG,该BUG描述:在UIView中同时存在单点手势与tableView。当点击tableview中的cell时,并不会触发didSelectRowAtIndexPath这个方法。

当遇到这个BUG的时候我的排查思路为:
1.tableView的delegate有没有设置。
2.检查UIView中各控件的层级关系与加载顺序,即tableView是否被其他控件覆盖。
3.添加的手势与tableview有点击事件冲突。

经过排查后发现出在点击事件冲突,那么接下来就是解决这个冲突。
首先设置代理

UITapGestureRecognizer * tapGesture = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(doSomething)];
tapGesture.delegate = self;

然后覆盖方法

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
    if ([NSStringFromClass([touch.view class]) isEqualToString:@"UITableViewCellContentView"]) {
        return NO;
    }
    return  YES;
}

重新运行下代码,发现点击事件的冲突被解决。
希望对有缘人有帮助。如果有不足或错误的地方,还望各位大佬指出,共同进步。

你可能感兴趣的:(iOS - 关于UIView中添加手势监听和tableView后,tableView的点击事件不执行问题)