在 AppDelegate 之外,我如何在 UINavigationController 中包含一个 UIViewController,然后再对它执行基本的 `performSegueWIthIden

Posted

技术标签:

【中文标题】在 AppDelegate 之外,我如何在 UINavigationController 中包含一个 UIViewController,然后再对它执行基本的 `performSegueWIthIdentifier`?【英文标题】:Outside of AppDelegate, how do I contain a UIViewController in UINavigationController before I basically `performSegueWIthIdentifier` to it? 【发布时间】:2015-08-25 20:47:19 【问题描述】:

我理解 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】:

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

【讨论】:

是的,这绝对是它。我有一种很好的感觉,就是这样,但是......在路上,所以我无法确认:P。谢谢!

以上是关于在 AppDelegate 之外,我如何在 UINavigationController 中包含一个 UIViewController,然后再对它执行基本的 `performSegueWIthIden的主要内容,如果未能解决你的问题,请参考以下文章

在 AppDelegate 之外,我如何在 UINavigationController 中包含一个 UIViewController,然后再对它执行基本的 `performSegueWIthIden

如何提示用户接受 AppDelegate 之外的推送通知?

iOS:如何在 AppDelegate 之外调用“应用程序 didRegisterForRemoteNotificationsWithDeviceToken”?

除了 AppDelegate 和 UIViewController 之外的一个类中的 GIDSignInDelegate 使用示例,用于 swift 中的 Google 身份验证

在应用委托之外注册远程通知

仅为 AppDelegate.m iOS 中的首次启动设置特定方向