打开和关闭UINavigationController

时间:2016-09-26 15:02:26

标签: ios uinavigationcontroller uitabbarcontroller

我知道这可能已经写过关于这个问题的某个地方,但我找不到解决方案,而且我已经解决了这个问题几天了。

我有一个带有4个UINavigationControllers的UITabbar应用程序。 在其中一个UINavigationControllers上有一个带有按钮的UIViewController,该按钮打开时带有另一个UINavigationController的模态转换。在打开时一切正常,但在从UIViewController关闭最后一个NC后,代码为:

self.dismiss(animated: false, completion: nil) 

self.navigationController?.dismiss(animated: false, completion: nil)

我遇到了问题。 无论我接下来做什么,我都会收到警告开始/结束外观转换的不平衡调用,并且在UIViewControllers方法上,不会调用viewWillAppear和viewDidAppear。但是为了说清楚,我只有在打开一个新视图时才会遇到这个问题,如果我只是在标签之间切换到其他UINavigationViewController,我也会得到它。

我已经检查了一些我读过的可能性,并且我确信我没有打开过两次。

我只是无法弄清楚它是多个NavigationControllers的问题还是我关闭它的方式或者是什么。

任何建议都会有所帮助。

EDIT1:

忘了告诉我,UINavigationController是用模态segue打开的,而不是用代码打开的。

所有NC都至少有一个VC(标签栏上全部4个,以及后面打开的那个)

EDIT2:

解除VC的代码在最后打开的NC(不是标签栏NC之一)上的最后一个打开的VC上运行,以返回到标签栏NC /他的VC之一。 为了确保我会再次尝试写它

TC -> NC    NC    NC    NC
      |     |     |     |
      VC    VC    VC    VC
       |
      NC
       |
      VC - the one that calls dismiss to return to previous VC

令人沮丧的是,在我打开另一个UINavigationController之前,一切都很好,但在此之后问题就开始了。或者添加另一件我注意到的事情,问题出现在modal呈现另一个控制器之后,无论是UINavigation还是普通的ViewController都无关紧要。

EDIT3:

感谢@kgkoutio问题解决了,我犯的错误是我没有调用super.viewDidLoad和super.viewWillAppear。将它添加到所有VC后,问题就消失了。

再次非常感谢@kgkoutio

1 个答案:

答案 0 :(得分:1)

你的代码驳回了NC而不是VC。当应用程序启动时,TabBar会使用一组导航控制器进行初始化。考虑解雇UIViewController而不是NC:

self.navigationController.topViewController?.dismiss(animated: false, completion: nil)