2016-02-28 26 views
0

我正在使用带有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 = falseviewWillAppear()方法内禁用此视图的用户交互。但是,当我在此视图控制器上收到我的委托回调后,稍后调用self.view.userInteractionEnabled = true不起作用,我也没有尝试上述任何方法。

+0

所以,只是为了澄清,你想要启用和禁用标签栏中的选项卡? – caseynolan

+0

关于混淆没有抱歉,我希望为位于我的标签栏索引1内的viewController中的视图启用交互。我已经在viewWillAppear中成功禁用了交互。但是,当我收到回调,我想重新启用交互... – MikeG

回答

2

而不是在视图级别关闭用户交互,请使用UIApplication beginIgnoringInteractionEventsendIgnoringInteractionEvents应用程序级别将其关闭。

+0

你是我的欧倍力!在这个看似微不足道的小问题上挣扎几个小时,你的回答已经比我知道的更多次了,再次感谢!!! – MikeG

相关问题