好的。对于你们中的某些人来说,这似乎很容易,但是很久以来我一直在面对这个问题。
我的问题是这样
->我有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)。
那我该怎么办?
任何帮助将不胜感激。谢谢您的期待。 :)
答案 0 :(得分:1)
解决此问题的最简单方法是进入导航堆栈,在选项卡2中抓住UINavigationController,然后将其弹出回到根视图。
self.tabBarController?.selectedIndex = 1
(self.tabBarController?.viewControllers[1] as? UINavigationController)?.popToRootViewController(animated: false)
但是请注意,如果您更改导航结构,这可能会失败。
答案 1 :(得分:1)
guard let controllers = tabBarController?.viewControllers,
let controller = controllers[1] as? UINavigationController else { return }
controller.popToRootViewController(animated: false)
答案 2 :(得分:1)
看起来您可以使用setViewControllers
更改每个选项卡的根视图控制器。
类似
let rootViewControllers = [VCa, VCd, VCg, VCj, VCm]
self.tabBarController.setViewControllers(rootViewControllers, animated: false)