swift 如何推回导航视图控件

swift how to push back to navigation view control

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

我要做的是当我从 ChatVC 单击后退按钮时,我应该返回到 ChatRoomVC 并仅在底部显示标签栏。

我尝试了下面的代码,但它显示黑屏并且也没有 tar 栏。

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

我想您可以使用以下 hack 来实现您想要的。在 ChatVCviewDidLoad 方法中执行:

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 也会显示。