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

时间:2018-08-16 02:26:40

标签: ios swift uinavigationcontroller uitabbarcontroller

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

Main.storyboard

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

2 个答案:

答案 0 :(得分:1)

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

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委托。在那里,您可以检查当前选定的视图控制器,将其投射到导航控制器,然后弹出到根视图控制器。

答案 1 :(得分:0)

在存储先前存储的索引的标签栏控制器类中使用taabbar didselect的delgate,并与当前选定的索引进行检查,如果不一致,则获取当前的顶级viewcontroller并将该控制器弹出到rootviewcontroller。