最近有个需求,是在UIView里面添加一个子视图UITableView,然后在UIView上添加了一个UITapGestureRecognizer,之后发现UITableView里的cell点击没有反应,然后分别在UITapGestureRecognizer的事件和
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath{}
分别打印,结果发现只执行了
UITapGestureRecognizer的事件,而
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath{}
根本没有执行。
经过查询资料发现解决方法:
1.首先设置
UITapGestureRecognizer的代理
2.重写- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
这个方法询问delegate是否允许手势接收者接收一个touch对象,返回YES,则允许对这个touch对象审核,NO,则不允许。
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
// 若点击了tableViewCell,则不截获Touch事件
if ([NSStringFromClass([touch.view class]) isEqualToString:@"UITableViewCellContentView"]) {
return NO;
}
return YES;
}
与UITapGestureRecognizer类似同样有冲突的手势还有UILongPressGestureRecognizer和UIPanGestureRecognizer(cell左滑删除)。