首页 > 解决方案 > 点击屏幕会导致当前控制器返回到前一个控制器

问题描述

每次我点击视图控制器顶部的某个位置时,它都会返回到前一个视图。根控制器不受影响,因为它也没有任何东西可以返回。我所有的视图控制器都受到了影响。(请阅读更新3)

我尝试过的事情:

  1. 寻找不必要的手势识别器。(结果:当我检查列表手势时,我收到了 nil。)
  2. 我想我可能不小心在视图中添加或留下了 IBOutlet 或其他东西。(结果:没有不必要的 IBOutlets。)
  3. 我从视图中禁用了用户交互以查看它是否会受到影响。(结果:在我再次启用用户交互之前,该错误似乎消失了。)
  4. 我试图做一些研究,但我没有得到我想要的结果。

点击绿线上方将使 View Controller 返回到之前的 Controller。 在此处输入图像描述

我对 Objective-C 和 Xcode 还比较陌生,所以我不知道我是否犯了新手错误。

更新(请阅读更新 3)

仍然没有,但这里有一些我尝试过的东西:

  1. 记录每个用户操作。
  2. 使用新的视图控制器创建了一个新项目。
  3. 打开一个以前的项目来测试它的视图控制器。
  4. 卸载并重新安装 Xcode。

所有尝试仍然伴随着那个奇怪的错误。

更新 2(请阅读更新 3)

我决定用创可贴解决这个问题。由于单击按钮时该错误不起作用,因此我将约束放在一个空按钮上,将其放在背景图像的顶部并在点击按钮时删除效果。

我认为这会起作用,但屏幕上有几个点会激活错误。我进行了实验并发现 ui 元素的某些部分激活了该错误。(示例:Stackview 中的一些标签、文本字段的顶部、开关、UICollectionView 的顶部等)

我已禁用某些 ui 元素的用户交互。不幸的是,并不是所有的 ui 元素都可以被禁用,因为有些需要用户交互。

我还发现用三个手指在屏幕上敲击会以某种方式激活该错误。

这是我在屏幕上尝试多次点击时在控制台中收到的错误代码:

<_UISystemGestureGateGestureRecognizer: 0x2822fc1e0>: Gesture: 下一次触摸前接收系统手势状态通知失败

更新 3

再次玩弄代码之后。我相信我已经弄清楚导致问题的原因,但不知道如何解决它。

我相信这与故事板转场有关,或者至少与正在使用的过渡有关。如果我将种类设置为“显示(例如推送)”,它就可以正常工作,但是如果我将种类设置为“呈现模态”并且转换为“部分卷曲”,那么错误就是这样。

旁注:这就是我测试它的方式。我创建了一个新项目(我认为语言不重要)。该项目有两个视图控制器;一个按钮,每个按钮都指向每个视图控制器。Segue 1 类似于“Present Modally”,过渡类似于“Partial curl”。Segue 2 位于第二个视图控制器上,类似于“显示(例如推送)”。要测试错误,请点击屏幕顶部。如果错误有效,那么它应该显示部分卷曲过渡,但相反并将用户发送回第一个视图控制器。

标签: iosobjective-cuistoryboardseguexcode10

解决方案


也许您正在体验来自导航控制器的标准向后滑动手势。就是这样试试这个代码:

目标-C:

if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
    self.navigationController.interactivePopGestureRecognizer.enabled = NO;
}

迅速:

navigationController?.interactivePopGestureRecognizer?.isEnabled = false

推荐阅读