uitableview 的 selectrowatindexpath 被 uitapgesturerecognizer 的问题

今天在控制器的 view 上添加了一个 UITapGestureRecognizer 手势来处理一些功能

1
2
3
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(endTextfieldEditing)];
tap.delegate = self;
[self.view addGestureRecognizer:tap];

但是这时候点击 tableView 的 cell 的时候不会跳转了,是点击手势截获了tableView 的 touch 事件
点击不会跳转
在 UIGestureRecognizerDelegate 的文档中发现了

1
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch

这个方法。
于是重写这个手势代理方法

1
2
3
4
5
6
7
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {

if ([NSStringFromClass([touch.view class]) isEqualToString:@"UITableViewCellContentView"]) {
return NO;
}
return YES;
}

点击跳转

这次就解决了 tableview 的 touch 被拦截的问题。