如何从情节提要以编程方式加载 UIViewController?
Posted
技术标签:
【中文标题】如何从情节提要以编程方式加载 UIViewController?【英文标题】:How to load UIViewController programmatically from storyboard? 【发布时间】:2014-08-24 16:59:53 【问题描述】:我在 Main.storyboard 中创建了一个带有几个按钮和标签的 UIViewController。我正在尝试使用 self.presentViewController 切换到该视图控制器,但它不会从情节提要中加载视图。默认情况下它只会加载一个空白的黑屏。关于如何从我在情节提要中创建的视图加载视图的任何想法?
self.presentViewController(ResultViewController(), animated: true, completion: nil)
【问题讨论】:
How to call a View Controller programmatically? 的可能重复项 【参考方案1】:您这样做的方式只是创建视图控制器的一个新实例。它不会根据您在 Interface Builder 中定义的原型创建一个。相反,您应该使用它,其中“SomeID”是您在 Interface Builder 中分配给视图控制器的情节提要 ID。
if let resultController = storyboard!.instantiateViewControllerWithIdentifier("SomeID") as? ResultViewController
presentViewController(resultController, animated: true, completion: nil)
您可以在 Interface Builder 的身份检查器中为您的视图控制器分配一个故事板 ID。
【讨论】:
只是一个评论,你需要添加一个!在 Swift 2 中的故事板之后【参考方案2】:完整的 Swift 3 代码,包括 Storyboard 的实例化:
let storyboard = UIStoryboard.init(name: "Main", bundle: Bundle.main)
if let mainViewController = storyboard.instantiateInitialViewController()
present(mainViewController, animated: false, completion: nil)
【讨论】:
如何在 MacOS(Cocoa) 上做到这一点?【参考方案3】:SWIFT 5.2
首先,您应该为 viewcontroller 定义一个 storyboardID 并在使用此代码后
let storyboard = UIStoryboard(name: "Main", bundle: nil) // type storyboard name instead of Main
if let myViewController = storyboard.instantiateViewController(withIdentifier: "myViewControllerID") as? CourseDetailVC
present(myViewController, animated: true, completion: nil)
【讨论】:
以上是关于如何从情节提要以编程方式加载 UIViewController?的主要内容,如果未能解决你的问题,请参考以下文章
当我以编程方式从情节提要加载窗口时,为啥在 NSView 中未调用 drawRect?
从情节提要重新加载视图时,以编程方式添加的 iOS 子视图会丢失
如何在 ios swift 中以编程方式将情节提要视图控制器加载到标签栏控制器中?
如何以编程方式从情节提要中填充静态 UITableView?