如何启用作为选项卡栏控制器索引的视图的用户交互
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 = false
在 viewWillAppear()
方法中。但是,片刻之后,当我在这个视图控制器上收到我的委托回调时,调用 self.view.userInteractionEnabled = true
不起作用,我尝试过的任何方法也不起作用,如上所示。
不是在视图级别关闭用户交互,而是在 应用程序 级别使用 UIApplication beginIgnoringInteractionEvents
和 endIgnoringInteractionEvents
.[=12 将其关闭=]
我目前正在使用带有 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 = false
在 viewWillAppear()
方法中。但是,片刻之后,当我在这个视图控制器上收到我的委托回调时,调用 self.view.userInteractionEnabled = true
不起作用,我尝试过的任何方法也不起作用,如上所示。
不是在视图级别关闭用户交互,而是在 应用程序 级别使用 UIApplication beginIgnoringInteractionEvents
和 endIgnoringInteractionEvents
.[=12 将其关闭=]