【发布时间】:2020-11-22 05:43:10
【问题描述】:
我有一个主视图控制器,它覆盖
touchesBegan 并在点击某个屏幕位置时播放声音。我有一个从这个视图控制器到另一个,我的自定义设置视图控制器的显示 segue。但是,当我将手指滑过这个新的手指时,背景视图控制器仍在响应我的触摸,因为仍在播放声音。
我没有实现导航控制器,似乎其他 segue 类型在后台响应触摸事件时也存在同样的问题。在 segue 之后,第一个视图控制器不应该不响应这些触摸吗?或者如果我误解了,停止在后台 VC 中调用触摸事件的正确方法是什么?
编辑: 在第一个视图控制器中,打印 view.isUserInteractionEnabled 时,尽管视图控制器在后台,但我得到 true。不确定这是否相关。
编辑 2: 我尝试添加一行以准备 segue 覆盖 self.view.isUserInteractionEnabled=false,但奇怪的是,只有在关闭设置视图控制器时才会禁用触摸。
更奇怪的是:如果我在我的新视图控制器中重写 touchesBegan,它会使我原来的视图控制器中的 touchesMoved 和 touchesBegan 方法静音。但是如果我只是在我的新控制器中覆盖touchesMoved,那么两个视图控制器中的touchesMoved 方法都会被调用。
我读到我们需要重写所有 4 个触摸处理程序并调用超类方法,但我忘了这样做。但是覆盖这两个类中的所有 4 个方法仍然会导致这个底层触摸事件通过。
我也想坚持这种方法而不是手势识别器。我假设必须有一种适当的方法来处理看起来像这个响应者链的东西?
这是一种简单的复制方法:如果您创建一个具有两个视图控制器 A 和 B 的简单项目,并且有一个按钮导致从 A 到 B 的 segue,并在 VC A 中实现 touches 方法(假设打印一些东西到控制台),然后即使在 segue 之后,也会发生完全相同的事情。 VC A 仍在处理触摸事件。
【问题讨论】: