UITableView 拥有属于自己的点击事件,
在将一个UITableView 的控件放在其它视图上, 并且其它视图需要添加手势进行操作的情况下,
我们会发现我们点击UITableView的cell的时候, 并没有触发代理方法:didSelectRowAtIndexPath
在UITableView上添加了UITapGestureRecognizer后会导致didSelectRowAtIndexPath失效,原因是UITapGestureRecognizer会截取了tableView的touch事件,导致无法响应行选择,解决方法是重写UIGestureRecognizerDelegate中的
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
shouldReceiveTouch:(UITouch *)touch
{
if([NSStringFromClass([touch.view class])isEqualToString:@"UITableViewCellContentView"]){//如果当前是tableView
//做自己想做的事
return NO;
}
return YES;
}
也可以根据 添加手势的View来判定:
-(BOOL)gestureRecognizer:(UIGestureRecognizer*)gestureRecognizer shouldReceiveTouch:(UITouch*)touch {
if([touch.viewisKindOfClass:[UIScrollViewclass]]) {
returnYES;
}
returnNO;