ios - UITableView 在不应该的时候将触摸事件传递给 superview

标签 ios cocoa-touch mapkit gesture-recognition

GIKAnimatedCallout示例代码、双击手势、双指点击手势、缩放手势和捏合手势都从 UITableView 传递到它下面的 MKMapView。我想阻止这一切发生。不应将 UITableView 内的触摸事件传递到 MKMapView。

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

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

我真的不知道还有什么办法可以解决这个问题。感谢任何指点。

最佳答案

如果我理解正确,您希望 MKMapView 在 UITableView 上做出手势时完全不使用react(在示例中,myMKMapView 的 myTableView 属性是有问题的 UITableView)。如果是这样,你应该实现

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

在您的 MKMapView 子类中(如果您没有子类,请创建一个子类。在本例中我将子类称为 myMKMapView)。首先让 MKMapView 的子类 myMKMapView 符合 UIGestureRecognizerDelegate 协议(protocol)。 在 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 应该忽略它。

关于ios - UITableView 在不应该的时候将触摸事件传递给 superview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11570160/

相关文章:

ios - 如何渲染复合 MKOverlay

ios - iOS 应用程序的收据验证码,不起作用

ios - 自引用键上的 FMDB 级联

objective-c - 使图像移动更多 "fluidly"

iphone - 更改 CALayer 的 anchor 会移动 View

iphone - UISegmentedView 中的 UIButton 没有被按下

ios - FMDB SQL 查询不返回任何数据

ios - Spritekit 添加粒子

ios - 放大时使用 MKMapView 在 setUserTrackingMode 上崩溃

ios - Mapkit map View 在第一次尝试时未显示