swift如何回到导航视图控件

时间:2017-11-15 15:09:32

标签: ios swift embed navigationbar tabbar

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

  • MainVC(嵌入标签栏控制器)
    • FriendListVC
    • ChatRoomUpperVC(嵌入导航视图控制器)
    • ChatRoomVC(嵌入ChatRoomUpperVC的NavigationViewController)(仅显示标签栏)
      • ChatRoomQuestionVC(从ChatRoomVC推送)(仅显示导航栏)
      • MatchedWaitVC(从ChatRoomQuestionVC推送)(隐藏选项卡和导航栏)
        • ChatVC(从MatchedWaitVC推送)(仅显示导航栏)
    • SettingVC

我要做的是当我从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
        }
    }

1 个答案:

答案 0 :(得分:0)

我猜你可以使用下面的hack来实现你想要的。在viewDidLoad的{​​{1}}方法中执行:

ChatVC

这将删除介于override func viewDidLoad() { super.viewDidLoad() if let root = navigationController?.viewControllers.first { navigationController?.viewControllers = [root, self] } } ChatVC之间的中间视图控制器。现在弹回(例如使用标准后退按钮,或从屏幕左边缘轻​​扫)将直接跳回ChatRoomVC

修改

要在ChatRoomVC中再次显示tabBar,请将其添加到ChatRoomVC

viewDidAppear

这样可以确保只要override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) self.tabBarController?.tabBar.isHidden = false } 出现在屏幕上,就会显示其tabBar。