如何在没有情节提要的情况下以编程方式实例化视图控制器

Posted

技术标签:

【中文标题】如何在没有情节提要的情况下以编程方式实例化视图控制器【英文标题】:How to instantiate a view controller programatically, without storyboard 【发布时间】:2017-03-29 05:22:38 【问题描述】:

有没有办法在不使用情节提要标识符的情况下以编程方式实例化视图控制器。我想将 CNContactPickerController 推送到我的根视图控制器中。

let controller = CNContactPickerViewController()
controller.delegate = self
navigationController?.present(controller, animated: true, completion: nil)

我这样做了,但是在contactPicker(代表)中,我从情节提要中推送了一个VC,我在其中保存了我想要从该特定联系人那里获得的信息。 问题:当我弹出最后一个视图控制器时,我想继续使用 CNConctactPickerControllerView 但我继续使用第一个视图控制器 我尝试了解雇,但没有任何反应..

【问题讨论】:

【参考方案1】:

这样做的问题是为您的视图控制器创建了 NONE 的 UI。您所做的只是实例化该类的一个实例。没有创建相应的 UI,您的 IBOutlets 也将为零。

您有 2 个选项,您可以使用界面构建器并从 Nib 或 Storyboard 实例化,或者您在代码中手动创建 ALL 您的 UI。

为了可重复使用,您可以在CNContactPickerViewController 上创建一个静态方法来为您处理情节提要实例化。请参阅以下内容:

class CBContactPickerViewController: UIViewController 

    static func fromStoryboard() -> CNContactPickerViewController 
        return UIStoryboard(name: "foobar", bundle: nil).instantiateViewController(identifier: "CNContactPickerViewController") as! CNContactPickerViewController
    

然后您可以按如下方式使用它:

self.present(viewController: CNContactPickerViewController.fromStoryboard(), animated: true, completion: nil)

【讨论】:

以上是关于如何在没有情节提要的情况下以编程方式实例化视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

如何使用给定的根视图控制器和初始视图控制器实例化情节提要?

无需 nib 以编程方式实例化 UIViewController

从情节提要“Main”中实例化具有标识符“UIViewController-ZWG-5q-24I”的视图控制器,但没有获得 UITableView。

如何以编程方式为情节提要中的子视图设置视图控制器?

如何从情节提要以编程方式加载 UIViewController?

如何以编程方式使用 Swift 3 在所有视图控制器中显示选项卡栏?