Как создать init VC из Storyboard? - PullRequest
0 голосов
/ 24 апреля 2019

Мне нужно создать init VC из UIStoryboard в AppDelegate.

Я использовал .instantiateInitialViewController (), но всегда получаю nil.

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.
    self.window = UIWindow(frame: UIScreen.main.bounds)
    let storyBoard: UIStoryboard = .init(name: "Storyboard", bundle: nil)
    if let vc = storyBoard.instantiateInitialViewController() {
        window?.rootViewController = vc
        window?.makeKeyAndVisible()
    }

    return true
}

Мой проект:

enter image description here

У меня нет файла 'ViewController' (и класса тоже).Почему я всегда получаю ноль в VC?Как это работает?Пожалуйста, объясните.

Ответы [ 3 ]

2 голосов
/ 24 апреля 2019

Наиболее вероятная причина для storyBoard.instantiateInitialViewController возврата nil заключается в том, что ваша раскадровка не имеет начального контроллера представления. Вы можете выбрать VC в раскадровке и установить флажок «Is Initial View Controller», чтобы сделать его начальным контроллером представления:

enter image description here

Обратите внимание, что если вы установите раскадровку в качестве "Основного интерфейса" в настройках вашего проекта, то начальный VC будет отображаться автоматически.

Чтобы избежать этого, измените этот параметр на пустую строку:

enter image description here

В качестве альтернативы, вы можете дать своему VC идентификатор в инспекторе идентичности:

enter image description here

И используйте instantiateViewController(withIdentifier) вместо

storyBoard.instantiateViewController(withIdentifier: "MyVC")
1 голос
/ 24 апреля 2019

Попробуйте это ..

let navigationController = self.window?.rootViewController as! UINavigationController
    let storyboard = UIStoryboard(name: "Storyboard", bundle: nil)
    let messageVC = storyboard.instantiateViewController(withIdentifier: "YourViewControllerID")
    navigationController.pushViewController(messageVC, animated: true)
0 голосов
/ 24 апреля 2019

Попробуй это.Я всегда перемещаюсь между контроллерами представления с этими кодами,

  let vc = storyboard?.instantiateViewController(withIdentifier: "ViewControllerStoryBoardId") as! YourViewControllerClass
        vc.page_idenifier = "Home page"//eg:- Passing data
        navigationController?.pushViewController(vc, animated: true)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...