在 Swift 中,如果我有一个 UITabBarController,我如何在切换选项卡之前弹出我当前的 navigationController?

In Swift, if I have a UITabBarController, how can I popToRootViewController my current navigationController before switching tabs?

我在 Swift 4 项目中有一个 UITabBarController。 UITabBarController 有 3 个选项卡,每个选项卡都通过关系 segue 连接到导航控制器。每个导航控制器都有一系列通过 show segues 连接的 UIViewControllers。设置如下图所示。

Main.storyboard

当用户切换选项卡时,我想在加载新选项卡视图之前将当前导航控制器弹出回根目录。我该怎么做?

在 tabbar 控制器中使用 taabbar 的 delgate didselect class 存储先前存储的索引并检查当前选择的索引,如果它不相同则获取当前顶部 viewcontroller 并弹出该控制器到 rootviewcontroller.

您可以使用以下代码执行此操作:

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, UITabBarControllerDelegate {

    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

        let tabBarVC = self.window?.rootViewController as! UITabBarController
        tabBarVC.delegate = self
        return true
    }


    func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {

    if  let navVC = tabBarController.selectedViewController as? UINavigationController {
        navVC.popToRootViewController(animated: true)
    }
    return true
}

当您切换标签时,将触发 TabBar 委托。在那里您可以检查当前选择的视图控制器,将其类型转换为导航控制器,然后弹出到根视图控制器。