我有几个视图控制器,它们非常复杂。
MainVC(嵌入标签栏控制器)
朋友清单VC
ChatRoomUpperVC(嵌入导航视图控制器)
ChatRoomVC(嵌入在ChatRoomUpperVC中的NavigationViewController)(仅显示选项卡栏)
ChatRoomQuestionVC(从ChatRoomVC推送)(仅显示导航栏)
MatchedWaitVC(从ChatRoomQuestionVC推送)(隐藏选项卡和导航栏)
ChatVC(从MatchWaitVC推送)(仅显示导航栏)
设置VC
我需要做的是,当我单击ChatVC中的“后退”按钮时,我应该回到ChatRoomVC并仅在底部显示标签栏。
我尝试了下面的代码,但它显示黑屏,也没有焦油条。
override func willMove(toParentViewController parent: UIViewController?) {
if parent == nil
{
var viewControllers = navigationController?.viewControllers
viewControllers?.removeLast(3)
navigationController?.setViewControllers(viewControllers!, animated: true)
self.navigationController?.isNavigationBarHidden = true
self.tabBarController?.tabBar.isHidden = false
}
}
最佳答案
我想您可以使用以下技巧来实现所需的功能。在viewDidLoad
的ChatVC
方法中,执行以下操作:
override func viewDidLoad() {
super.viewDidLoad()
if let root = navigationController?.viewControllers.first {
navigationController?.viewControllers = [root, self]
}
}
这将删除
ChatVC
和ChatRoomVC
之间的中间视图控制器。现在弹出回来(例如,使用标准的后退按钮,或从屏幕的左边缘滑动)会直接跳回到ChatRoomVC
。编辑
要在
ChatRoomVC
中再次显示tabBar,请将其添加到viewDidAppear
中:override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
self.tabBarController?.tabBar.isHidden = false
}
这样可以确保
ChatRoomVC
一出现在屏幕上,它的tabBar也会显示出来。关于ios - 快速如何推回导航 View 控件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47310839/