选项卡栏,当来自另一个选项卡的视图控制器时弹出到根视图控制器(默认 vc)

Posted

技术标签:

【中文标题】选项卡栏,当来自另一个选项卡的视图控制器时弹出到根视图控制器(默认 vc)【英文标题】:Tab Bar, pop to root view controller(default vc) when coming from another tab's view controller 【发布时间】:2019-05-14 15:03:32 【问题描述】:

好的。对于你们中的一些人来说,这似乎很容易,但我长期以来一直面临这个问题。

我的问题是这样的:

--> 我有 5 个标签栏控制器,每个控制器都由导航控制器组成。

--> 现在我有多个视图控制器附加到每个标签栏控制器,如下所示:

Tab1 -- VCa -> VCb -> VCc

Tab2 -- VCd -> VCe -> VCf

Tab3 -- VCg -> VCh -> VCi

Tab4 -- VCj -> VCk -> VCl

Tab5 -- VCm -> VCn -> VCo

--> 当我启动我的应用并选择 Tab2 时,我导航到 VCd -> VCe -> VCf

--> 现在我选择 Tab5,然后我导航到 VCm -> VCn,这里有一个按钮可以将我导航回 Tab2强>。

Tab5,在 VCn 中单击按钮

self.tabBarController?.selectedIndex = 1 // Navigate back to Tab2

--> 现在问题来了。我已成功导航到 Tab2(VCf)。但我的问题是我希望显示默认(第一个/初始)Tab2(VCd)

那我该怎么办呢?

任何帮助将不胜感激。感谢期待。 :)

【问题讨论】:

【参考方案1】:

解决此问题的最简单方法是进入导航堆栈,抓住选项卡 2 中的 UINavigationController,然后将其弹回根视图。

self.tabBarController?.selectedIndex = 1 
(self.tabBarController?.viewControllers[1] as? UINavigationController)?.popToRootViewController(animated: false)

但是请注意,如果您更改导航结构,这可能会失败。

【讨论】:

【参考方案2】:
guard let controllers = tabBarController?.viewControllers, 
      let controller = controllers[1] as? UINavigationController else  return 
controller.popToRootViewController(animated: false)

【讨论】:

【参考方案3】:

您似乎可以使用 setViewControllers 更改每个选项卡的根视图控制器。

比如,

let rootViewControllers = [VCa, VCd, VCg, VCj, VCm]
self.tabBarController.setViewControllers(rootViewControllers, animated: false)

【讨论】:

以上是关于选项卡栏,当来自另一个选项卡的视图控制器时弹出到根视图控制器(默认 vc)的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI:再次轻按选定的选项卡时,弹出到根视图

弹出到根视图控制器,没有表视图的动画崩溃

从 Popover 关闭或弹出到根视图控制器

弹出导航控制器并选择选项卡?

当标签栏点击两次时禁用自动弹出到根视图控制器

仅使用一个视图控制器的具有多个选项卡的选项卡栏