Должен ли я использовать
UIViewController-производные классы для
отдельный экран за экраном
функциональность моего приложения?
Да.
И будет ли мое приложение по сути подано
контроль над одним из этих представлений
контроллеры, которые затем построят
моя сцена с ее компонентами?
Да, хотя многие венчурные капиталисты просто получают свое дерево представлений от пера и занимаются обязанностями основного контроллера: 1. распространение изменений модели в различных полях представления; и 2. распространение событий просмотра обратно в соответствующие действия на модели. Я рекомендую познакомиться с InterfaceBuilder. Это несовершенно и раздражает, но может сэкономить вам часы работы и много кода.
Как переключиться на соответствующий контроллер вида?
Несколько способов:
- Если ваши VC размещены в контроллере навигации,
[[self navigationController] pushViewController:theNextVC animated:YES]
- это идиома.
- Переключение между набором VC, где нет четкой иерархии, лучше всего сделать с
UITabBarController
.
- Если вы хотите сделать модальное наложение,
[self presentModalViewController:theNextVC animated:YES]
как. Хотя модальные стеки глубже, чем один или два, становятся громоздкими.
- Представление самого первого VC выполняется в 4.x путем присвоения его свойству rootViewController вашего окна (делегат приложения может сделать это, или основной перо может); или для pre-4, традиционный способ, обычно используемый в делегате приложения:
[myMainWindow addSubview:[myInitialVC view]]
.
- несколько специализированных VC, поставляемых Apple (видео, сборщик фотографий), имеют свои собственные методы представления.
Обратите внимание, что с помощью первых двух методов, если вам нужно поведение, но не виджеты пользовательского интерфейса, вы можете скрыть панель навигации или панель вкладок и делать все программно.
следует ли ожидать, что в результате будет вызван loadView?
Так и будет, но большинство ваших "Я появляюсь сейчас!" логика принадлежит viewWillAppear:
(вызывается до начала анимации перехода, когда представление еще не имеет родителя) и viewDidAppear:
(вызывается после анимации, когда представление полностью видно.) loadView
вызывается один раз, когда ваш VC думает представление вскоре понадобится и не будет вызываться снова, если только из-за нехватки памяти представление сбрасывается и требуется его воссоздание.
Переопределите loadView
, если вы хотите полностью заменить загрузку пера другим методом построения дерева представления. Я начал этим заниматься, но редко делаю это больше.
Переопределите viewDidLoad
, когда вы по-прежнему хотите, чтобы обычная загрузка пера происходила, но вы также хотели выполнить некоторую собственную конструкцию / постобработку дерева представлений. Это то, чем я занимаюсь в 99% случаев.
когда некоторые триггерные вызовы для перехода, скажем, к экрану B, будут сделаны вызовы для «перехода» из моих представлений, а затем вызовут какой-то другой контроллер представлений, чтобы «настроить ваши представления» и перенести их в? *
Переход происходит за вас, если вы используете любой из методов презентации, перечисленных ранее. Все, что вам нужно сделать, это реализовать viewWill / DidAppear и друзей, чтобы получать информацию, когда это произойдет.
Возможно, вы захотите исследовать пример проекта "TheElements" (ищите в документах xcode "элементы"). По запросу, он не использует nibs; это все сложное в коде. В нем есть хорошие примеры использования TabBarController и NavigationController, и более или менее рекомендуемое распределение ответственности между венчурными капиталистами.