我有几个视图控制器,它们非常复杂。


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
        }
    }

最佳答案

我想您可以使用以下技巧来实现所需的功能。在viewDidLoadChatVC方法中,执行以下操作:

override func viewDidLoad() {
    super.viewDidLoad()
    if let root = navigationController?.viewControllers.first {
        navigationController?.viewControllers = [root, self]
    }
}


这将删除ChatVCChatRoomVC之间的中间视图控制器。现在弹出回来(例如,使用标准的后退按钮,或从屏幕的左边缘滑动)会直接跳回到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/

10-09 18:32