如何从 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 中的另一个视图控制器实例化导航和选项卡控制器(显示详细信息)?的主要内容,如果未能解决你的问题,请参考以下文章