IPhone - Какие методы View Controller использовать - PullRequest
3 голосов
/ 27 августа 2009

Я пытаюсь выяснить, какая логика должна входить в различные методы UIViewController, такие как viewDidLoad, viewDidAppear, viewWillAppear, ...

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

Мой главный вопрос: что люди обычно помещают в viewDidLoad, .... методы.

В настоящее время я:

viewDidLoad - настроить контроллер панели вкладок и установить его представление на собственное представление контроллера представления

viewDidAppear - проверить, сохранил ли пользователь информацию для входа если нет - присутствует с логином если это так, войдите в систему и получите данные приложения для первой вкладки

Сейчас я пытаюсь выяснить, должна ли моя логика для настройки контроллера панели вкладок переходить в loadView, а не в viewDidLoad.

Любая помощь будет великолепна. Небольшие примеры, найденные в Интернете, хороши, но они не дают подробных сведений о том, как следует структурировать большие приложения.

Ответы [ 2 ]

3 голосов
/ 27 августа 2009

Вы не должны реализовывать оба -viewDidLoad и -loadView; они для разных целей. Если вы загружаете NIB, вы должны реализовать -viewDidLoad для выполнения любых функций, которые необходимо выполнить после загрузки NIB. Подключение панели вкладок там уместно, если вы еще этого не сделали в NIB.

-loadView должен быть реализован, если вы не используете NIB, и должен создать представление.

-viewWillAppear вызывается непосредственно перед выходом на экран. Это хорошее место для настройки наблюдений за уведомлениями, обновления ваших данных на основе классов моделей, которые изменились с тех пор, как вы последний раз были на экране, и в противном случае соберите свои действия, прежде чем пользователь увидит вас. Вы не должны выполнять какие-либо анимации здесь. Вы не на экране; Вы не можете оживить. Я вижу много глюков анимации из-за этой ошибки. Это вроде работает, но выглядит странно.

-viewDidAppear вызывается после того, как вы пришли на экран. Именно здесь вы выполняете любые анимации входа (например, скольжение модально; не то, чтобы вы делали это очень часто, но я просто смотрел на некоторый код, который это делал).

-viewWillDisappear вызывается прямо перед выходом за экран. Здесь вы можете выполнять любые анимации (включая отмену выбора ячеек таблицы и т. Д.).

-viewDidDisappar вызывается после того, как вы за кадром (и анимация закончена). Снесите любые наблюдения здесь, освободите память, если это возможно, ложитесь спать как можно лучше.

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

0 голосов
/ 27 августа 2009

viewDidLoad будет вызываться один раз в течение жизни каждого UIViewController представления. Вы помещаете туда вещи, которые должны быть настроены и работать до того, как пользователь начнет взаимодействовать с представлением.

viewDidAppear вызывается всякий раз, когда представление показывается пользователю. Это потенциально может быть вызвано более одного раза. Примером может служить корневой экран приложения, использующего UINavigationController, чтобы выдвигать и отображать иерархию представлений. Положите туда вещи, которые вы хотели бы делать каждый раз. Например, вы можете захотеть скрыть UINavigationBar корневого экрана, но показать его для всех подэкранов, поэтому здесь вы бы скрыли панель.

Следовательно, вы бы поставили свою логику для настройки UITabBarController в viewDidLoad, поскольку это должно быть сделано только один раз.

Что касается вашего приложения, есть ли причина, по которой вы не просто заставляете UITabViewController быть контроллером, загружаемым вашим делегатом приложения? Кажется, что в вашем приложении есть уровень косвенности, который вам может понадобиться, а может и не понадобиться. Вероятно, лучше упростить это сейчас, а потом выполнить рефакторинг, если вам нужно что-то более сложное.

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