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

Posted

技术标签:

【中文标题】重新打开选项卡时返回视图层次结构中的初始 ViewController【英文标题】:Return to initial ViewController in view hierarchy when tab is reopened 【发布时间】:2019-01-18 06:26:26 【问题描述】:

我目前遇到UITabBarControllers 和UINavigationControllers 的问题。

假设我的UITabBar 中有 2 个ViewControllers

MenuOne

MenuTwo

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

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

我的理解是这是 Apple 的意图,这就是 UITabBarControllersUINavigationControllers 一起工作的方式,但是当我在 MenuOne 中深入了解一些 ViewController 时,我不希望我的用户在选项卡而不是被重定向到初始的ViewController

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

MenuOne > * 点击按钮 * > PageOne > * 点击标签 * > MenuTwo > * 点击标签 * > PageOne

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

MenuOne > * 点击按钮 * > PageOne > * 点击标签 * > MenuTwo > * 点击标签 * > MenuOne

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

【问题讨论】:

【参考方案1】:

您可以像这样创建自定义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

【讨论】:

哇,这太容易了。谢谢!

以上是关于重新打开选项卡时返回视图层次结构中的初始 ViewController的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SwiftUI 中再次初始化 View?

当返回到“导航架构组件”中的同一选项卡时,嵌套片段的状态会丢失

以角度切换选项卡时保持选项卡状态

更改选项卡时视图更改大小

通过代码操作视图层次结构

这个标签栏控制器应该嵌入在哪里?