在AppDelegate之外,在我基本上`performSegueWIthIdentifier`之前,如何在UINavigationController中包含一个UIViewController?

时间:2015-08-25 20:47:19

标签: ios swift uiviewcontroller uinavigationcontroller segue

我理解AppDelegate中的概念。

基础知识是这样的:

let mainStoryboard: UIStoryboard = UIStoryboard(name: “Main”, bundle: nil)

var mainViewController = mainStoryboard.instantiateViewControllerWithIdentifier(
“MainViewController”) as! UIViewController

var navController = UINavigationController(rootViewController: mainViewController)

self.window?.rootViewController = navController
self.window?.makeKeyAndVisible()

这将成功使你的mainViewController成为一个NavigationController和函数。

我不想在AppDelegate中这样做。

我有一个名为A的UIViewController,其中不是包含在UINavigationController中。从A,我现在做的是performSegueWithIdentifier到另一个名为B的UIViewController。我想以编程方式使B包含在UINavigationController中。我不想在故事板中实现这一点。这必须以编程方式完成。

我想我必须使用mainStoryboard.instantiateViewControllerWithIdentifier(...)来实例化B,然后将它包装在A中某处的UINavigationController中(最好是我打算转到B的地方)。那么,除了performSegueWithIdentifier以外,我到达了B?因为如果我执行segue,那么它将不会转到包含在UINavigationController中的B。

我希望这不是太复杂,但如果一切都没有意义,我可以提供细节。

1 个答案:

答案 0 :(得分:2)

除了实际显示新的视图控制器之外,您可以采用的方法类似于代码示例中的方法。假设您在视图控制器A中有一个应该显示视图控制器B的方法,您可能会这样做:

func showViewControllerB() {
    let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
    let viewControllerB = mainStoryboard.instantiateViewControllerWithIdentifier("ViewControllerB") as! ViewControllerB
    let navController = UINavigationController(rootViewController: viewControllerB)
    presentViewController(navController, animated: true, completion: nil)
}