Ios 重新打开选项卡时,返回视图层次结构中的初始ViewController

Ios 重新打开选项卡时,返回视图层次结构中的初始ViewController,ios,swift,uinavigationcontroller,uitabbarcontroller,Ios,Swift,Uinavigationcontroller,Uitabbarcontroller,我当前遇到UITabBarControllers和UINavigationControllers的问题 假设我的uitabar中有2个ViewControllers: 美诺酮 菜单两 在MenuOne上,我有一个按钮,它指向一个新的ViewController第一页 如果我导航到第一个选项卡(MenuOne),然后单击按钮并按顺序切换到PageOne,选项卡栏将保留。如果我点击第二个选项卡(MenuTwo),然后返回到MenuOne,我将返回到PageOne,这是我在该视图层次结构中停止的位

我当前遇到
UITabBarController
s和
UINavigationControllers
的问题

假设我的
uitabar
中有2个
ViewControllers

  • 美诺酮

  • 菜单两

MenuOne
上,我有一个按钮,它指向一个新的
ViewController
<代码>第一页

如果我导航到第一个选项卡(
MenuOne
),然后单击按钮并按顺序切换到
PageOne
,选项卡栏将保留。如果我点击第二个选项卡(
MenuTwo
),然后返回到
MenuOne
,我将返回到
PageOne
,这是我在该视图层次结构中停止的位置

我的理解是,这是苹果的意图,这就是
uitabarcontrollers
如何与
UINavigationControllers
一起工作,但当我是
MenuOne
中的几个ViewControllers时,我不希望我的用户在选项卡中导航,而不是被重定向到初始的
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
的类设置为
MyTabBarController

哇,这真是太容易了。非常感谢。