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

Outside of AppDelegate, how do I contain a UIViewController in UINavigationController before I basically `performSegueWIthIdentifier` to it?

我理解 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。

我希望这不会太复杂,但如果有任何不合理的地方,我可以提供详细信息。

除了实际显示新的视图控制器之外,您可以执行此操作的一种方法类似于您在代码示例中使用的方法。假设你在视图控制器 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)
}