选项卡栏,当来自另一个选项卡的视图控制器时弹出到根视图控制器(默认 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)的主要内容,如果未能解决你的问题,请参考以下文章