cocoa-touch - programming - uiview uiresponder




Правильно ли «гнездовать» UIViewControllers внутри других UIViewControllers, как вы бы UIViews? (2)

У меня есть довольно сложное представление, для меня, так или иначе, у которого есть несколько «лотков» с элементами пользовательского интерфейса на них. Они вставляются и выходят из моего корневого представления. Я хотел бы вложить (addSubview) элементы внутри представления. Каждый из них нуждается в некоторой настройке перед отображением ... и никто не может быть настроен в IB (это подклассы UIView).

Мне интересно, имеет ли смысл подкласс UIViewController для каждого «лотка», а затем свойство вида VC указывает на представление «лоток», которое я могу заполнить моими пользовательскими объектами UIView. Таким образом, я могу использовать методы viewDidLoad и т. Д. В UIViewController.

Я не знаю, как другие делают это - по крайней мере, в нескольких образцах, на которые я смотрел. Это создаст ситуацию, когда одновременно будут отображаться несколько контроллеров представлений на экране. от самого контроллера навигации вниз до корневого контроллера и его вида, а затем любого числа (ну, разрешающего размер экрана) этих небольших лоток-мониторов. Если да, то как работает цепочка ответчиков? я предполагаю, что он перейдет от самого низкого UIView к его включающему VC, затем к этому родительскому представлению VC, затем VC этого вида и т. д. и т. д. повторите, повторите .. до UIApplication ... я прошу о проблемах?

ИЛИ, я просто придерживаюсь UIViews и добавляю subviews в subviews и т. Д. И т. Д.


До iOS 5.0 это специально не рекомендуется, потому что события жизненного цикла контроллеров вложенных представлений - viewWillAppear и т. Д. - не будут вызываться. См. Нарушение UIViewControllers .

С несколькими видами UIViewController, видимыми сразу, некоторые из этих контроллеров могут не получать важные сообщения, такие как -viewWillAppear: или -didReceiveMemoryWarning. Кроме того, некоторые из их свойств, таких как parentViewController и interfaceOrientation, могут не устанавливаться или обновляться, как ожидалось.

В iOS 5.0 добавлен UIViewControllers сдерживания, который правильно обрабатывает эти события жизненного цикла, добавляя контроллеры дочерних элементов .

- (void)addChildViewController:(UIViewController *)childController

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


Мой опыт в том, что вы пытаетесь сделать, был хорошим. Я стараюсь, чтобы файлы nib были как можно более простыми, поэтому я беру любое возможное «subview» и инкапсулирую его в свой собственный файл nib с помощью собственного контроллера представления, поэтому у меня есть вложенные контроллеры представлений. В одном из моих приложений у меня очень сложная ячейка таблицы, у которой есть subview. Таким образом, у меня появилась иерархия, которая выглядит следующим образом: контроллер таблицы на верхнем уровне, контроллеры tableviewcell для каждой строки и внутри каждого из них - подчиненный контроллер для подсмотра внутри каждой ячейки.

И все работает нормально.

Простите мой английский.







uiviewcontroller