在有效负载的另一个UITabBarController VC中触发segue?

时间:2017-07-11 07:53:34

标签: ios swift uiviewcontroller uitabbarcontroller segue

我可以使用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。

1 个答案:

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