如何在没有故事板的情况下以编程方式实例化视图控制器

How to instantiate a view controller programatically, without storyboard

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

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

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

这样做的问题是为您的视图控制器创建了 UI 的 NONE。您所做的只是实例化 class 的一个实例。对应 UI 的 None 已创建,您的 IBOutlet 也将为零。

您有 2 个选项,要么使用界面构建器并从 Nib 或情节提要中实例化,要么在代码中手动创建 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)