【问题标题】:How to load UIViewController programmatically from storyboard?如何从情节提要以编程方式加载 UIViewController?
【发布时间】:2014-08-24 16:59:53
【问题描述】:

我在 Main.storyboard 中创建了一个带有几个按钮和标签的 UIViewController。我正在尝试使用 self.presentViewController 切换到该视图控制器,但它不会从情节提要中加载视图。默认情况下它只会加载一个空白的黑屏。关于如何从我在情节提要中创建的视图加载视图的任何想法?

self.presentViewController(ResultViewController(), animated: true, completion: nil)

【问题讨论】:

标签: ios uiviewcontroller swift


【解决方案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)
 }

【讨论】:

    猜你喜欢
    • 2012-02-28
    • 2017-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-27
    • 2010-12-28
    • 2012-06-08
    • 2012-05-11
    相关资源
    最近更新 更多