просмотр управления в iOS - PullRequest
       4

просмотр управления в iOS

1 голос
/ 02 февраля 2011

Я уже создал пару приложений для iPhone и iPad, но я написал их либо для другого API, поддерживающего API, либо для библиотек с открытым исходным кодом, таких как Cocos2d, которые поддерживают управление сценой и переходы экрана. Я не чувствую, что понял, как управление экраном / сценой / просмотром предполагается без этих внешних API. Может ли кто-нибудь очень просто, но четко объяснить, как приложение будет управлять переходами экрана и / или указать мне хороший справочник, который демонстрирует это с как можно меньшим количеством помех?

Должен ли я использовать производные от UIViewController классы для разделения экранных функций моего приложения (кроме функций, которые уже предназначены для обработки многоэкранных действий, таких как контроллеры навигации)? И будет ли мое приложение по существу передавать управление одному из этих контроллеров представления, который затем будет конструировать мою сцену с ее компонентами (такими как метки, кнопки, все виды представлений). Как мне переключиться на соответствующий контроллер представления, и следует ли ожидать, что в результате будет вызван loadView? Затем, когда некоторые вызовы триггера для перехода, скажем, к экрану B, будут сделаны вызовы для «перехода» из моих представлений, затем вызовут другой контроллер представления, чтобы «настроить ваши представления» и перевести их в?

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

Ответы [ 2 ]

7 голосов
/ 02 февраля 2011

Должен ли я использовать 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, и более или менее рекомендуемое распределение ответственности между венчурными капиталистами.

1 голос
/ 02 февраля 2011

У вас есть 2 основных варианта для вашего базового контроллера, UITabBarController или UINavigationController.(Вы можете поместить UINavigationController внутри UITabBarController, но не наоборот).

Если у вас есть UITabBarController, проще всего назначить разные контроллеры представления (подклассы UIViewController) для каждой вкладки.UITabBarController будет обрабатывать переходы между ними и вызывать методы, такие как viewWillAppear.

С помощью UINavigationController вы устанавливаете rootViewController.Этот контроллер представления отвечает за вызов [self.navigationController pushViewController:animated:].Это часто делается с помощью UITableViewController.UINavigationController будет вызывать такие методы, как viewWillAppear.

Последний вариант представления контроллера представления - это его модальное представление.Вот где экран всплывает, чтобы заполнить экран.Вы можете настроить его так, чтобы он поднимался снизу, переворачивался или появлялся. Для этого создайте свой контроллер представления и вызовите -[UIViewController presentModalViewController:animated:].

Кроме этого, большинство контроллеров представления находятся на экране.за один раз (кроме iPad).Используйте подклассы UITableView и UIScrollView или просто UITableView.Каждый контроллер представления должен быть независимым от своего контейнера.Это означает, что вы можете поместить тот же контроллер представления в UINavigationController или установить его как вкладку в UITabBarController, либо представить его модально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...