我可以使用tabBarController?.selectedIndex = targetIndex
在UITabBarController中从一个UIViewController交换到另一个UIViewController。我想知道如何在切换后触发segue。
我尝试过if let vc = tabBarController?.viewControllers?[0] as MyViewController {}
并调用vc.performSegue()
但是它出错了,抱怨它是一个UINavigationController。 (我甚至无法使vc.prepare()
工作但我无法使用segue标识符从头开始创建一个UIStoryBoardSegue,它需要作为第一个参数。)我想这个是因为UITabBarController中的所有UIViewControllers都在导航控制器中。
如何在标签栏控制器中从索引0切换到1,然后在导航控制器中嵌入的视图控制器中触发segue?注意,我需要传递一个调用对象(我的UIViewController)或一个有效负载的副本以用于上下文目的到被拦截的UIViewController。
答案 0 :(得分:1)
就像你说的那样,在索引处呈现的viewController是一个UINavigationController。你应该得到UINavigationController的rootViewController并在RootViewController上执行Segue。
下面的代码应该有效:
self.tabBarController?.selectedIndex = 1
guard let vc = self.tabBarController?.viewControllers?[1] as? UINavigationController else {
return
}
guard let rootVC = vc.viewControllers.first as? SecondViewController else {
return
}
rootVC.vc = self
rootVC.performSegue(withIdentifier: "test", sender: self)