在GIKAnimatedCallout示例代码中,双击手势,双指敲击手势,缩放手势和捏合手势都从UITableView传递到其下方的MKMapView。我想阻止这种情况发生。不应将UITableView内的触摸事件传递到MKMapView。
我尝试为点按添加UIGestureRecognizer,并将其设为空方法,但这些触摸事件仍会发送到MKMapView以及UITableView。
通过调试器查看UITableView的superview层次结构,我看到UITableView是MKMapView的后代。
我真的不知道如何处理这个问题。任何指针都表示赞赏。
答案 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应该忽略它。