UITableView不应该将触摸事件传递给superview

时间:2012-07-19 22:19:14

标签: ios cocoa-touch mapkit gesture-recognition

GIKAnimatedCallout示例代码中,双击手势,双指敲击手势,缩放手势和捏合手势都从UITableView传递到其下方的MKMapView。我想阻止这种情况发生。不应将UITableView内的触摸事件传递到MKMapView。

我尝试为点按添加UIGestureRecognizer,并将其设为空方法,但这些触摸事件仍会发送到MKMapView以及UITableView。

通过调试器查看UITableView的superview层次结构,我看到UITableView是MKMapView的后代。

我真的不知道如何处理这个问题。任何指针都表示赞赏。

1 个答案:

答案 0 :(得分:4)

如果我理解正确,你希望MKMapView在UITableView上做出手势时根本不作出反应(在例子中,myMKMapView的myTableView属性是有问题的UITableView)。如果是这样,你应该实施

 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch; 

在你的MKMapView的子类中(如果你没有一个子类,则创建一个子类。在这个例子中我调用了子类myMKMapView)。首先让您的MKMapView子类myMKMapView符合UIGestureRecognizerDelegate协议。 在MKMapView的.h文件中:

@interface myMKMapView : MKMapView <UIGestureRecognizerDelegate>

完成此操作后,进入myMKMapView的.m文件并执行以下操作:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    UIView *view = [self.view hitTest:[touch locationInView:self.view] withEvent:nil];

    if ([view isDescendantOfView:(self.myTableView)]) {
        return NO;
    }
    return YES;
}

这告诉myMKMapView如果在myTableView属性上执行了一个手势,myMKMapView应该忽略它。