在UIView和UITableView中冲突的UITapGestureRecognizer

我有一个UIView ,其中我添加了一个UITapGestureRecognizer 。 在该视图中我还有一个子视图,其中基本上是某种UITableView 。 问题是为什么UITableView不能识别行上的点击,而是一直进入点击手势识别器的处理程序。 这是为什么,我该如何解决这个问题? 如果我将点击数设置为2,那么它可以正常工作。 关于如何解决这个问题的任何想法? 基本上它不会调用didSelectRowAtIndexPath

将识别器的cancelsTouchesInView设置为NO 。 否则,它会“消耗”自己的触摸,并且不会将其传递到表格视图。 这就是选择事件永远不会发生的原因。

如果您希望UITableView UITapGestureRecognizer都接收触摸事件,那么cancelsTouchesInView = NO将起作用。 如果您希望轻敲手势识别器不接收针对表格视图的触摸事件,则稍微不那么简单但非常容易。

基本上,当您创建手势识别器时,您将self设置为其委托。 然后实现gestureRecognizer:shouldReceiveTouch: delegate方法。 基本实现可能如下所示。

 -(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{ UITableView *tableView = self.tableView; CGPoint touchPoint = [touch locationInView:tableView]; return ![tableView hitTest:touchPoint withEvent:nil]; } 

基本上这个方法(如实现的那样)询问tableView这个触摸的位置是否属于tableView的管辖范围,如果是,它将阻止手势识别器接收触摸……允许tableView接收触摸。