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

时间:2019-05-14 15:03:33

标签: ios swift uitabbarcontroller

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

我的问题是这样

->我有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)

那我该怎么办?

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

3 个答案:

答案 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)