我知道这可能已经写过关于这个问题的某个地方,但我找不到解决方案,而且我已经解决了这个问题几天了。
我有一个带有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
答案 0 :(得分:1)
你的代码驳回了NC而不是VC。当应用程序启动时,TabBar会使用一组导航控制器进行初始化。考虑解雇UIViewController而不是NC:
self.navigationController.topViewController?.dismiss(animated: false, completion: nil)