如何在切换标签时将UITabbarItem的viewcontroller设置为默认的viewcontroller?

时间:2018-05-09 06:03:36

标签: ios swift uitabbarcontroller

我有UITabBarController。它有4 tabBarItem

  1. 假设我在1st tabBarItem defaultViewController(1)和我 去了另一个ViewController(2),后面显示了一些 第一个defaultViewController(1)中的操作
  2. 然后我切换到2nd tabBarItem defaultViewcontroller(2)
  3. 我再次切换回1st tabBarItem,显示ViewController(2)

    我想展示defaultViewController(1)。如何使用swift 4实现此目的。

  4. defaultViewController(1)defaultViewController(2)分别是第1和第2 ViewController的默认TabBarItem。***

2 个答案:

答案 0 :(得分:1)

扩展UITabbarController的子类并将其用作tabbar的类。在该工具中UITabBarControllerDelegatedidSelect并使用popToRootViewController弹出到您的defaultViewController

func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController){

    if viewController is UINavigationController {
        //when you have `UINavigationController`
        let rootNavigationController = viewController as! UINavigationController
        rootNavigationController.popToRootViewController(animated: false)
    } else {
        //when you don't have `UINavigationController` then dismiss all viewcontroller that was presented.
        let rootViewController = viewController
        if rootViewController.presentingViewController != nil {
            rootViewController.dismiss(animated: false, completion: nil)
        }
    }
}

注意:添加self.delegate = self以符合viewDidLoad方法中的协议。

答案 1 :(得分:1)

假设您在 UITabBarController 的每个标签页中都有 UINavigationController defaultViewController(1)是第一个标签的rootViewController,在其中有一个导航到 ViewController(2)的按钮。

首先,让我们创建通用解决方案。像这样创建 UIApplication 扩展,

extension UIApplication {
    class func topViewController(controller: UIViewController? = UIApplication.shared.keyWindow?.rootViewController) -> UIViewController? {
        if let navigationController = controller as? UINavigationController {
            return topViewController(controller: navigationController.visibleViewController)
        }
        return controller
    }
}

AppDelegate 中实现 UITabBarControllerDelegate 并执行以下代码,

func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
    if tabBarController.selectedIndex == 0 {
        UIApplication.topViewController()?.navigationController?.popToRootViewController(animated: false)
    }
}

在上面的代码中,我已将 tabBarController.selectedIndex 设为0,您可以根据需要使其不同。

如有任何疑问,请与我联系。