今天在项目开发中遇到UITableView 的didSelectRowAtIndexPath代理方法不回调,排除了代理设置这些低级错误后,仍然不回调,去搜索后发现,有可能是与项目的手势发生冲突。项目里我用到了在一个加了手势的view上添加了tableview,下面方法主要是解决这类项目需求的解决方案。
- 先对你项目的手势设置代理
UITapGestureRecognizer* singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
singleTap.delegate = self;
[self.view addGestureRecognizer:singleTap];
- 重写UIGestureRecognizerDelegate中的 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch方法。
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
// 判断是UITableViewCellContentView,则不截获Touch事件
if ([NSStringFromClass([touch.view class]) isEqualToString:@"UITableViewCellContentView"]) {
return NO;
}
return YES;
}