Swift 背景视图控制器响应触摸事件?
我有一个主视图控制器,它覆盖Swift 背景视图控制器响应触摸事件?,swift,xcode,Swift,Xcode,我有一个主视图控制器,它覆盖 触摸开始并在触摸特定屏幕位置时播放声音。我有一个从这个视图控制器到另一个视图控制器的显示序列,我的自定义设置视图控制器。然而,当我将手指滑过这个新的屏幕时,背景视图控制器仍在响应我的触摸,因为仍在播放声音 我没有实现导航控制器,而且似乎其他segue类型也有同样的问题,触摸事件在后台响应。第一个视图控制器不应该在segue之后对这些触摸做出响应吗?或者,如果我有误解,什么是正确的方式来阻止触摸事件被称为在后台VC 编辑:在第一视图控制器中,当打印view.isUse
触摸开始
并在触摸特定屏幕位置时播放声音。我有一个从这个视图控制器到另一个视图控制器的显示序列,我的自定义设置视图控制器。然而,当我将手指滑过这个新的屏幕时,背景视图控制器仍在响应我的触摸,因为仍在播放声音
我没有实现导航控制器,而且似乎其他segue类型也有同样的问题,触摸事件在后台响应。第一个视图控制器不应该在segue之后对这些触摸做出响应吗?或者,如果我有误解,什么是正确的方式来阻止触摸事件被称为在后台VC
编辑:在第一视图控制器中,当打印view.isUserInteractionEnabled
时,尽管视图控制器在后台,我还是得到了true
。不确定这是否相关
编辑2:我尝试在prepare for segue overrideself.view.isUserInteractionEnabled=false中添加一行,但奇怪的是,这只会在解除设置视图控制器时禁用触摸
更奇怪的是:如果我在新的视图控制器中覆盖touchsbegind
,它会使原始视图控制器中的touchsmoved
和touchsbegind
方法都静音。但是如果我只是在我的新控制器中覆盖touchesMoved
,则会调用两个视图控制器中的touchesMoved
方法
我读到我们需要覆盖所有4个触摸处理程序并调用超类方法,我忘记了这么做。但是重写这两个类中的所有4个方法仍然会导致该底层触摸事件通过
我还想坚持使用这种方法,而不是使用手势识别器。我想一定有一个合适的方法来处理这个响应链
这里有一个简单的复制方法:如果您创建一个包含两个视图控制器a和B的简单项目,并且有一个按钮将a和B进行切换,并在VC a中实现Touchs方法(比如说将某些内容打印到控制台),那么即使在切换之后,也会发生完全相同的事情。VC A仍在处理触摸事件 如果要防止触碰上一个视图,请尝试全屏显示下一个视图
let controller = segue.destination as! YourViewController
controller.modalPresentationStyle = .fullScreen
如果您想阻止触摸上一个视图,请尝试全屏显示下一个视图
let controller = segue.destination as! YourViewController
controller.modalPresentationStyle = .fullScreen