UITableView的代理方法didSelectRowAtIndexPath与手势点击的冲突


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;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容