如何使用故事板中的视图以编程方式创建UIViewController

时间:2019-07-11 14:50:10

标签: ios swift uiviewcontroller

我有一个用Main.storyboard设计的视图控制器,名为ProfileViewController,也是该名称的对应类。 我可以像这样实例化viewController,

UIStoryboard(name: "SignUp", bundle: nil).instantiateViewController(withIdentifier: "ProfileViewController") as? ProfileViewController

但是我想做的是这样实例化视图控制器

let profileViewController = ProfileViewController(/*argument list*/)

1 个答案:

答案 0 :(得分:0)

Storyboard的视图控制器必须storyboard实例化。如果需要自定义构造函数(如初始化程序),则可以定义一个简单的函数,如下所示:

extension ProfileViewController {
    static func new(argument: any) -> ProfileViewController {
        let vc = UIStoryboard(name: "SignUp", bundle: nil).instantiateViewController(withIdentifier: "ProfileViewController") as! ProfileViewController
        vc.argument = argument
        return vc
    }
}

请注意,如果要使用真正的初始化程序,则不能使用情节提要。您可以使用设计的视图控制器的视图并将其分配给初始化程序中的视图,但是您将失去其他视图控制器设置。

extension ProfileViewController {
    convenience init(argument: Any) {
        self.init()
        self.view = UIStoryboard(name: "SignUp", bundle: nil).instantiateViewController(withIdentifier: "ProfileViewController").view
        self.argument = argument
    }
}