Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 背景视图控制器响应触摸事件?_Swift_Xcode - Fatal编程技术网

Swift 背景视图控制器响应触摸事件?

Swift 背景视图控制器响应触摸事件?,swift,xcode,Swift,Xcode,我有一个主视图控制器,它覆盖 触摸开始并在触摸特定屏幕位置时播放声音。我有一个从这个视图控制器到另一个视图控制器的显示序列,我的自定义设置视图控制器。然而,当我将手指滑过这个新的屏幕时,背景视图控制器仍在响应我的触摸,因为仍在播放声音 我没有实现导航控制器,而且似乎其他segue类型也有同样的问题,触摸事件在后台响应。第一个视图控制器不应该在segue之后对这些触摸做出响应吗?或者,如果我有误解,什么是正确的方式来阻止触摸事件被称为在后台VC 编辑:在第一视图控制器中,当打印view.isUse

我有一个主视图控制器,它覆盖
触摸开始
并在触摸特定屏幕位置时播放声音。我有一个从这个视图控制器到另一个视图控制器的显示序列,我的自定义设置视图控制器。然而,当我将手指滑过这个新的屏幕时,背景视图控制器仍在响应我的触摸,因为仍在播放声音

我没有实现导航控制器,而且似乎其他segue类型也有同样的问题,触摸事件在后台响应。第一个视图控制器不应该在segue之后对这些触摸做出响应吗?或者,如果我有误解,什么是正确的方式来阻止触摸事件被称为在后台VC

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

编辑2:我尝试在prepare for segue override
self.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