跨多个子视图处理触摸事件

Posted

技术标签:

【中文标题】跨多个子视图处理触摸事件【英文标题】:Handling a touch event across multiple subviews 【发布时间】:2014-03-25 13:12:50 【问题描述】:

我是 ios 开发的新手。我有一个自定义绘制视图,它由覆盖屏幕上目标区域的多个子视图组成。具体来说,这是一个类似于国际象棋的棋盘游戏,我为每个方格使用了一个视图。正方形被创建为 UIView 上的子视图。为此有一个 UIViewController。从我读到的,我必须在我的 UIView 中有 touchesBegan、touchesEnded 等调用来处理这些。但是这些函数都没有被调用。我在基本视图和所有子视图上添加了这些调用。所以——

    如何在 iOS 模拟器中模拟这些触摸事件?鼠标单击不会调用 touchesBegan ,touchesEnded 调用任何视图。

    理想情况下,我想在 UIViewController 中处理这些,因为我想通过一些逻辑来运行触摸。那可能吗?如何实现?

【问题讨论】:

您是在 IB/Storyboard 中还是在代码中设置触摸事件?如果在代码中,你能说明它们是如何被添加的吗? @Stonz2 - 我发现了问题,我必须在视图上启用用户交互。我正在以编程方式设置它。 【参考方案1】:

请参考THIS 它是 Apple 示例代码中的教程,它描述了如何很好地处理触摸。 只需运行示例代码并仔细阅读说明,您就会清楚地了解触控在 iOS 上的工作原理。

【讨论】:

我发现了问题。请看我上面的回答。您指向示例的链接可能对我有用。我会通过它。【参考方案2】:

当我以编程方式而不是通过情节提要添加视图时,userInteractionEnabled 变量默认设置为 NO。设置完成后,我会在视图中调用 touchesEnabled 调用。

【讨论】:

【参考方案3】:

检查一下:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

    UITouch *touch = [touches anyObject];
    if(![touch.view isKindOfClass:[yourView class]])
    
    

希望这会有所帮助。

【讨论】:

以上是关于跨多个子视图处理触摸事件的主要内容,如果未能解决你的问题,请参考以下文章

将触摸事件传递给多个选项之一

使用多个视图/布局时在 Android 中处理触摸事件

在 Android 中的多个视图上同时处理触摸事件

iOS触摸事件处理详解

如何在子视图和父视图组触摸事件之间变化

处理包含 UIButton 的 UIView 的触摸事件