0

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

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

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

4

1 回答 1

4

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

你有 2 个选项,要么使用界面构建器并从 Nib 或 Storyboard 实例化,要么在代码中手动创建所有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)
于 2016-11-15T10:57:57.857 回答