如何从Storyboard创建初始化VC?

时间:2019-04-24 12:44:51

标签: ios swift uikit

我必须从AppDelegate中的UIStoryboard创建初始化VC。

我使用了.instantiateInitialViewController(),但我总是得到零。

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.
    self.window = UIWindow(frame: UIScreen.main.bounds)
    let storyBoard: UIStoryboard = .init(name: "Storyboard", bundle: nil)
    if let vc = storyBoard.instantiateInitialViewController() {
        window?.rootViewController = vc
        window?.makeKeyAndVisible()
    }

    return true
}

我的项目:

enter image description here

我没有“ ViewController”文件(也没有课程)。为什么我总是在vc中得到“ nil”?它是如何工作的?请解释。

3 个答案:

答案 0 :(得分:2)

Build\Package\web 返回nil的最可能原因是因为您的情节提要没有初始视图控制器。您可以在情节提要中选择一个VC,然后选中“是初始视图控制器”以使其成为初始视图控制器:

enter image description here

请注意,如果在项目设置中将情节提要板设置为“主界面”,则初始VC将自动显示。

为避免这种情况,请将此设置更改为空字符串:

enter image description here

或者,您可以在身份检查器中为您的VC提供标识符:

enter image description here

并改用storyBoard.instantiateInitialViewController

instantiateViewController(withIdentifier)

答案 1 :(得分:1)

尝试一下。

let navigationController = self.window?.rootViewController as! UINavigationController
    let storyboard = UIStoryboard(name: "Storyboard", bundle: nil)
    let messageVC = storyboard.instantiateViewController(withIdentifier: "YourViewControllerID")
    navigationController.pushViewController(messageVC, animated: true)

答案 2 :(得分:0)

尝试一下。我总是使用这些代码在视图控制器之间导航,

  let vc = storyboard?.instantiateViewController(withIdentifier: "ViewControllerStoryBoardId") as! YourViewControllerClass
        vc.page_idenifier = "Home page"//eg:- Passing data
        navigationController?.pushViewController(vc, animated: true)