我正在使用带有3个选项卡的选项卡栏控制器,我将其称为选项卡0,1和2.可以说用户是当前看到标签栏控制器中索引为0的视图控制器。当用户点击该视图上的按钮时,发生两件事 1.启动任务,由单独的控制器类处理 2.我呼叫tabBarController.selectedIndex = 1
将UI移动到位于索引1中的视图控制器我的标签栏。如何启用作为标签栏控制器索引的视图的用户交互
此时,在用户点击前一视图中的按钮之后,我通过将其放入viewWillAppear()
中,禁用了标签栏控制器中当前视图(索引1)的用户交互。
然后,几秒钟后,启动,完成的任务,并通过委派,我收到了当前在视图中的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...
的原因。由于视图是可选的,调用loadView()
可以防止值为零,因此应用程序不会崩溃。但是,用户交互仍然未启用。我也试过没有成功的代码,我已经在上面评论过了。任何建议都会超级赞赏,谢谢。
编辑:我在苹果文档中看到,一个人不应该打电话loadView()
,所以必须有比我所做的更好的方式,但它对我来说是不知道的!
编辑:FYI,当我使用tabBarController?.selectedIndex = 1
,到UI移动到视点索引1内,我能够通过将self.view.userInteractionEnabled = false
的viewWillAppear()
方法内禁用此视图的用户交互。但是,当我在此视图控制器上收到我的委托回调后,稍后调用self.view.userInteractionEnabled = true
不起作用,我也没有尝试上述任何方法。
所以,只是为了澄清,你想要启用和禁用标签栏中的选项卡? – caseynolan
关于混淆没有抱歉,我希望为位于我的标签栏索引1内的viewController中的视图启用交互。我已经在viewWillAppear中成功禁用了交互。但是,当我收到回调,我想重新启用交互... – MikeG