【问题标题】:Background view controller responding to touch events?背景视图控制器响应触摸事件?
【发布时间】:2020-11-22 05:43:10
【问题描述】:

我有一个主视图控制器,它覆盖 touchesBegan 并在点击某个屏幕位置时播放声音。我有一个从这个视图控制器到另一个,我的自定义设置视图控制器的显示 segue。但是,当我将手指滑过这个新的手指时,背景视图控制器仍在响应我的触摸,因为仍在播放声音。

我没有实现导航控制器,似乎其他 segue 类型在后台响应触摸事件时也存在同样的问题。在 segue 之后,第一个视图控制器不应该不响应这些触摸吗?或者如果我误解了,停止在后台 VC 中调用触摸事件的正确方法是什么?

编辑: 在第一个视图控制器中,打印 view.isUserInteractionEnabled 时,尽管视图控制器在后台,但我得到 true。不确定这是否相关。

编辑 2: 我尝试添加一行以准备 segue 覆盖 self.view.isUserInteractionEnabled=false,但奇怪的是,只有在关闭设置视图控制器时才会禁用触摸。

更奇怪的是:如果我在我的新视图控制器中重写 touchesBegan,它会使我原来的视图控制器中的 touchesMovedtouchesBegan 方法静音。但是如果我只是在我的新控制器中覆盖touchesMoved,那么两个视图控制器中的touchesMoved 方法都会被调用。

我读到我们需要重写所有 4 个触摸处理程序并调用超类方法,但我忘了这样做。但是覆盖这两个类中的所有 4 个方法仍然会导致这个底层触摸事件通过。

我也想坚持这种方法而不是手势识别器。我假设必须有一种适当的方法来处理看起来像这个响应者链的东西?

这是一种简单的复制方法:如果您创建一个具有两个视图控制器 A 和 B 的简单项目,并且有一个按钮导致从 A 到 B 的 segue,并在 VC A 中实现 touches 方法(假设打印一些东西到控制台),然后即使在 segue 之后,也会发生完全相同的事情。 VC A 仍在处理触摸事件。

【问题讨论】:

    标签: swift xcode


    【解决方案1】:

    如果您想防止触摸前一个视图,请尝试将下一个视图呈现为全屏。

    let controller = segue.destination as! YourViewController
    controller.modalPresentationStyle = .fullScreen
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多