通过 subView 禁用触摸视图

Posted

技术标签:

【中文标题】通过 subView 禁用触摸视图【英文标题】:Disable touching view through subView 【发布时间】:2016-04-13 19:00:25 【问题描述】:

我正在尝试使用 SpriteKit + Swift 制作我的第一款游戏。

我现在要解决的问题是,如果我在我的主 SKView 中添加一个没有任何按钮的 SUBVIEW,只有背景颜色和大小并触摸它,我的主视图会处理这种触摸,就像没有子视图一样全部。

因此,对于父视图的 UITapGestureRecognizer,不存在类似 UIView 类型的子视图。我发现解决它的唯一方法是在没有文本和处理程序的子视图上放置一个子视图大小的按钮。但是这种方式看起来很毛骨悚然……

【问题讨论】:

你是说你的触摸会同时进入 skview 和它的子视图? 【参考方案1】:

可能是您的子视图(或其父视图之一)将userInteractionEnabled 设置为false。 UIView 默认将userInteractionEnabled 设置为true,但例如UIImageView(它是UIView 的子类)默认将userInteractionEnabled 设置为false

设置为 NO 时,用户事件(例如触摸和键盘)用于 视图被忽略并从事件队列中删除。当设置为 是的,事件正常传递到视图。默认值为 这个属性是YES。

(...)

注意

一些 UIKit 子类会覆盖这个属性并返回一个不同的 默认值。请参阅该类的文档以确定它是否 返回不同的值。

请参阅Apple docs 了解更多信息。

它本身可能不是您的子视图,而是它的父视图之一,因为此设置会向下传播。

如果设置为 NO,则此视图(及其子视图)将被排除在外 接受触摸。触及此视图或其子视图之一“下降 通过”到它背后的视图。

来源:Matt Neuburg 编写的 ios 编程

更多信息,请查看On iOS, if a superview's userInteractionEnabled is NO, then all subviews are disabled as well?

【讨论】:

以上是关于通过 subView 禁用触摸视图的主要内容,如果未能解决你的问题,请参考以下文章

按下按钮(子视图)时不要在超级视图上处理平移手势

如何在禁用父视图(不是子视图)的父视图上打开子视图(自定义)?

在子视图之外触摸时删除子视图

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

禁用所有视图的触摸事件

如何在 android 视图上禁用所有用户输入(点击、触摸)