如何启用作为选项卡栏控制器索引的视图的用户交互

How to enable user interaction of a view that is an index of a tab bar controller

我目前正在使用带有 3 个选项卡的选项卡栏控制器,我将它们称为选项卡 0、1 和 2。假设用户当前正在选项卡栏控制器中看到索引 0 中的视图控制器.当用户点击此视图上的按钮时,会发生两件事 1. 启动一个任务,由单独的控制器处理class 2. 我调用 tabBarController.selectedIndex = 1 将 UI 移动到标签栏索引 1 中的视图控制器。

此时,在用户点击前一个视图中的按钮后,我在选项卡栏控制器中禁用了当前视图(索引 1)的用户交互,方法是将其放入 viewWillAppear() .

然后,几秒钟后,启动的任务完成,并且通过委派,我收到了当前在视图中的 viewController 的回调(我的标签栏中的索引 1)。此时收到回调时,我想为当前视图启用用户交互。

这是我的代码...

    func updateUIOnTaskCompletion(){

      self.loadView()
      self.view.userInteractionEnabled = true

      //I have also tried the following with no success
      //      self.tabBarController?.selectedViewController?.loadView()
      //      self.tabBarController?.selectedViewController?.loadView()

      //      self.tabBarController?.selectedViewController!.view.userInteractionEnabled = true
      //      self.tabBarController?.view.userInteractionEnabled = true

}

我调用 loadView() 的原因是因为如果不调用它,应用程序会因 found nil while unwrapping an optional... 而崩溃。由于 view 是可选的,调用 loadView() 可以防止值为 nil,因此应用程序不会崩溃。但是,用户交互仍然无法启用。我也试过没有成功我注释掉的代码above.Any建议将非常感谢,谢谢。

编辑:我在苹果文档中看到永远不要调用 loadView(),所以肯定有比我正在做的更好的方法,但我不知道它!

编辑:仅供参考,当我使用 tabBarController?.selectedIndex = 1 将 UI 移动到索引 1 内的视图时,我可以通过将 self.view.userInteractionEnabled = falseviewWillAppear() 方法中。但是,片刻之后,当我在这个视图控制器上收到我的委托回调时,调用 self.view.userInteractionEnabled = true 不起作用,我尝试过的任何方法也不起作用,如上所示。

不是在视图级别关闭用户交互,而是在 应用程序 级别使用 UIApplication beginIgnoringInteractionEventsendIgnoringInteractionEvents.[=12 将其关闭=]