Как программно создать UIViewController с видом из раскадровки - PullRequest
1 голос
/ 11 июля 2019

У меня есть контроллер представления, спроектированный в Main.storyboard с именем ProfileViewController, также соответствующий класс с таким именем. Я могу создать экземпляр viewController следующим образом:

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

Однако я хотел бы создать экземпляр контроллера вида, как этот

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

1 Ответ

0 голосов
/ 11 июля 2019

Контроллеры представления раскадровки ДОЛЖНЫ создавать экземпляры с 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
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...