在UIView和UITableView中冲突的UITapGestureRecognizer

adi*_*dit 23 iphone objective-c ipad ios

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

das*_*ght 55

一套cancelsTouchesInView你的识别器NO.否则,它会"消耗"触摸本身,并且不会将其传递给表格视图.这就是选择事件永远不会发生的原因.

  • [将此值设置为"NO"指示识别器将所有触摸传递到基础视图,即使它已识别序列.](http://developer.apple.com/library/IOs/#documentation/UIKit/Reference /UIGestureRecognizer_Class/Reference/Reference.html) (4认同)

NJo*_*nes 26

如果你想两者UITableView UITapGestureRecognizer接收触摸事件,然后是该cancelsTouchesInView = NO会工作.如果您希望轻敲手势识别器不接收针对表格视图的触摸事件,则稍微容易但非常容易.

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

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

基本上这种方法(如实现的那样)询问tableView该触摸的位置是否属于tableView管辖范围内,如果确实如此,则会阻止手势识别器接收触摸......允许tableView接收触摸.