如何从 segue 中的另一个视图控制器实例化导航和选项卡控制器(显示详细信息)?

Posted

技术标签:

【中文标题】如何从 segue 中的另一个视图控制器实例化导航和选项卡控制器(显示详细信息)?【英文标题】:How to instantiate a navigation and tab controller from another view controller which is in segue(show detail)? 【发布时间】:2016-06-23 16:53:58 【问题描述】:

我之前问过一个问题,由于How to instantiate a navigation controller from another view controller? 的答案之一,它可以成功运行,但我遇到了一个新问题,即每当我单击显示详细信息 segue 中的按钮时,它应该导航到带有导航栏的普通选项卡,但它什么也没做。

这是故事板

这是场景

1) 用户单击 firstViewController 上的按钮,它将转到显示详细信息中的 thirdViewController

2) 用户单击另一个按钮,然后应该使用下面的代码转到 secondViewController

这是代码

在 ThirdViewController 中

@IBAction func buttonTapped(sender: UIButton) 

        guard let tabBarController = tabBarController else  return 
        let navController = tabBarController.viewControllers![1] as! UINavigationController
        let secondViewController = navController.topViewController as! SecondViewController

        secondViewController.name = "My name is TDog"

        tabBarController.selectedIndex = 1


    

我做错了什么?我还需要实例化吗?

【问题讨论】:

【参考方案1】:

您必须关闭实际的ThirdViewController,但是在这个类中,您还不知道UITabViewController,因此获取它的一种方法(不是重新实例化,而是从内存中调用)是调用您的 rootViewController窗口(可以在你的项目中完成):

@IBAction func buttonTapped(sender: AnyObject) 
    self.presentingViewController!.dismissViewControllerAnimated(true, completion: nil)
    let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
    let tabBarController = appDelegate.window!.rootViewController
    if tabBarController is UITabBarController 
        let tab = tabBarController as! UITabBarController
        let navController = tab.viewControllers![1] as! UINavigationController
        let secondViewController = navController.topViewController as! SecondViewController
        secondViewController.nameString = "My name is TDog"
        tab.selectedIndex = 1
    

【讨论】:

你的在线代码let navController = tabBarController.viewControllers![1] as! UINavigationController只要把tabBarController改成tab,我已经解决了。谢谢【参考方案2】:

你得打电话

self.presentingViewController.dismissViewControllerAnimated(true, completion: nil)

在下一行之后

tabBarController.selectedIndex = 1

【讨论】:

试过了,没用,什么也没有发生。

以上是关于如何从 segue 中的另一个视图控制器实例化导航和选项卡控制器(显示详细信息)?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 segue 从 UIView 导航到 UIView 控制器?

Swift segue 到函数中的另一个视图控制器

CoreData 或 Segue 用于访问类实例

带有大标题的导航栏上的动画segue错误

如何从嵌入在导航控制器中的视图控制器接收信息

实例化一个保持导航栏Swift的vc