我在标签栏控制器中有两个主要的VC。在第一个VC上点击一个按钮,你将被带到另一个VC(而不是第二个标签栏VC),当你点击完成按钮时,我想转到第二个标签栏vc。
通常我会执行segue ...但是当我这样做时它会移除底部的标签栏。所以,我现在只是解雇并回到最初的VC,但我真的想去第二个标签栏vc,所以我尝试了这个
dismiss(animated: true) {
self.tabBarController?.selectedIndex = 2
}
我在另一个SO帖子上看到了self.tabBar ...但是我似乎无法找到我设置索引的位置...我试过1以防万一它自动从0开始,我尝试过如果它从1开始
我是否关闭或者是否有更好的方法来实现我想要的目标?
摘要
总结清楚。我有3个视图控制器。 1和3位于标签栏控制器中。 VC 2不在TBC中。要进入VC 2,VC 1上有一个按钮。当用户在VC 2上完成时,他/她点击一个按钮。而不是仅仅退回到VC 1我想转到VC 3,但是当我执行segue时它转到VC 3但是移除了Tab Bar
答案 0 :(得分:9)
确保您拥有UINavigationController
作为第一个ViewController。然后您可以访问tabBarController,然后可以切换选项卡:
// if vc was pushed
@IBAction func onFinish(_ sender: Any) {
// store tabBarController for later use
let tabBarController = self.tabBarController
// pop to root vc (green one)
_ = self.navigationController?.popToRootViewController(animated: false)
// switch to 2nd tab (red vc)
tabBarController?.selectedIndex = 1
}
// if vc was presented modally
@IBAction func onFinish(_ sender: Any) {
self.dismiss(animated: false, completion: nil)
if let tabBarController = self.presentingViewController as? UITabBarController {
tabBarController.selectedIndex = 1
}
}
// if vc was presented modally + switching tab in completion block
@IBAction func onFinish(_ sender: Any) {
if let tabBarController = self.presentingViewController as? UITabBarController {
self.dismiss(animated: true) {
tabBarController.selectedIndex = 1
}
}
}
答案 1 :(得分:0)
索引很可能始终从您使用的任何语言的0开始。
至于您在视图控制器上调用self
的标签栏,它不在视图控制器上显示它正在解除。你应该可以做到
self.window?.rootViewController.tabBarController?.selectedIndex = 1
为了实现这一目标。根据您的VC的设置,这可能不起作用,因此您可能需要使用它。
答案 2 :(得分:0)
您可以在关闭视图控制器之前移动到特定索引。
func moveToVC() {
if let mainNavVC = self.presentingViewController as? UINavigationController {
if mainNavVC.viewControllers.count > 0 {
if let tabbarVC = mainNavVC.viewControllers.first as? TabBarViewController {
tabbarVC.selectedIndex = 0
}
}
}
}