В чем разница между различными способами перехода к новому UIViewController? - PullRequest
0 голосов
/ 03 октября 2018

Я видел 3 разных реализации того, как инициировать UIViewController из файла XIB.Метод, который я использовал, это создать UIViewController и позволить XCode также создать XIB-файл, а затем выполнить:

let vc = CustomViewController()
navigationController?.push(vc, true)

Это работает, работает автоматическая разметка и все отлично.

Почему все остальные примеры, которые я вижу в Интернете, можно использовать:

let vc = storyboard?.instantiateViewControllerWithIdentifier("CustomViewController") as CustomViewController

или:

let vc = HomeViewController(nibName: "HomeViewController", bundle: nil)

Я что-то упускаю из-за того, что я делаю?Обратите внимание, что я не использую сегы и раскадровку навигации.Я разделяю все мои контроллеры представления в их собственных файлах xib.

Редактировать: я использую IB для разметки пользовательского интерфейса и связывания IBActions обратно с моим исходным файлом.Вот почему я запутался, почему это работает и почему я никогда не вижу этот пример где-либо опубликованным.Xcode делает что-то закулисное, чтобы заставить это работать?

1 Ответ

0 голосов
/ 04 октября 2018

Я считаю, что причина, по которой это работает, изложена в Документах Apple для разработчиков.Так как я просто вызываю инициализацию по умолчанию для контроллера представления и не переопределяю loadView(), он просматривает файлы xib для тех, которые соответствуют имени контроллера представления, как объяснено ниже:

Если вы используетеnib-файл для хранения представления вашего контроллера представления, рекомендуется явно указывать этот nib-файл при инициализации вашего контроллера представления.Однако, если вы не укажете имя пера и не переопределите метод loadView в своем пользовательском подклассе, контроллер представления ищет файл пера другими способами.В частности, он ищет файл пера с соответствующим именем (без расширения .nib) и загружает этот файл пера всякий раз, когда запрашивается его представление.В частности, он ищет (по порядку) файл пера с одним из следующих имен:

Он ищет файл пера, имя которого совпадает с именем класса контроллера представления.Например, если имя класса MyViewController, он ищет файл MyViewController.nib.

SourceL: https://developer.apple.com/documentation/uikit/uiviewcontroller/1621487-nibname?language=objc

...