在 Swift 中从 AppDelegate 加载嵌入到 UINavigationController 的控制器

Posted

技术标签:

【中文标题】在 Swift 中从 AppDelegate 加载嵌入到 UINavigationController 的控制器【英文标题】:Load a controller embed to a UINavigationController from AppDelegate in Swift 【发布时间】:2015-01-27 23:05:36 【问题描述】:

我需要从 AppDelegate 显示嵌入到 UINavigationController 的表格视图。

我通常使用

    let viewController: UIViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("prova") as ViewController
    window?.rootViewController?.presentViewController(viewController, animated: false, completion: nil)

但是它不支持embed controller,这个代码需要怎么适配?

Here is a test project.

【问题讨论】:

【参考方案1】:

您需要使用情节提要中的标识符实例化UINavigationController。导航控制器应该连接到它在故事板中的 rootViewController 并会自动显示它。

let navController: UINavigationController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("provaNavController") as UINavigationController
window?.rootViewController?.presentViewController(navController, animated: false, completion: nil)

更新

由于您没有在情节提要中设置初始视图控制器,因此请使用以下代码:

window = UIWindow(frame: UIScreen.mainScreen().bounds)
let navController: UINavigationController = UIStoryboard(name: "Main", bundle:nil).instantiateViewControllerWithIdentifier("provaNavController") as UINavigationController
window?.rootViewController = navController
window?.makeKeyAndVisible()

您还需要从常规项目设置中清除 Main.storyboard:

【讨论】:

否定,它不起作用,在我的故事板中没有设置初始控制器。我用项目测试更新了问题。 是啊,我从来没想过要从App Target清除主界面,谢谢!

以上是关于在 Swift 中从 AppDelegate 加载嵌入到 UINavigationController 的控制器的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 5.0 中从 AppDelegate 实例化窗口失败 [重复]

何在混合应用程序(主要语言 ObjC)中从 Swift 获取对 appdelegate 的引用以避免引用循环

Swift:如何在测试期间不加载 AppDelegate

在推送通知 Swift 2 AppDelegate 上加载特定的 viewController

在 TableViewCell Swift 中从 Firebase 加载图像

在 Swift 中从 Plist 加载 Url 图像