重新打开选项卡时 Return 到视图层次结构中的初始 ViewController

Return to initial ViewController in view hierarchy when tab is reopened

我目前遇到 UITabBarControllerUINavigationControllers 的问题。

假设我的 UITabBar 中有 2 个 ViewControllers:

MenuOne 上,我有一个指向新 ViewController 的按钮; PageOne

如果我导航到第一个选项卡 (MenuOne),然后单击带有推送转至 PageOne 的按钮,选项卡栏仍然存在。如果我点击第二个选项卡 (MenuTwo),然后点击 return 到 MenuOne,我将返回到 PageOne,这是我在该视图层次结构中离开的地方。

我的理解是,这是 Apple 的意图,这就是 UITabBarControllers 使用 UINavigationControllers 的方式,但是当我在 MenuOne 中使用一些 ViewController 时,我不会希望我的用户浏览选项卡而不是被重定向到初始 ViewController.

为了澄清,这是现在的过程:

MenuOne > * 点击按钮 * > PageOne > * 点击标签 * > MenuTwo > * 点击选项卡 * > PageOne

这就是我希望它的工作方式:

MenuOne > * 点击按钮 * > PageOne > * 点击标签 * > MenuTwo > * 点击选项卡 * > MenuOne

有人知道我该如何解决这个问题吗?

您可以像这样创建自定义 UITabBarController

class MyTabBarController: UITabBarController, UITabBarControllerDelegate {
    override func viewDidLoad() {
        self.delegate = self
    }

    // when a controller is selected...
    func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
        if let vc = viewController as? UINavigationController {
            // pop the navigation controller to root VC
            vc.popToRootViewController(animated: false)
        }
    }
}

在故事板中,将 UITabBarController 的 class 设置为 MyTabBarController