2010-11-23 3 views
2

Несмотря на название этого вопроса, мне хорошо известно, что UIViewControllers не могут быть размещены внутри UIViews.UIViewController «внутри» UIView на iPad

В документации Apple, UIViewControllers управляют полным экраном в приложениях iPhone. Тем не менее, на iPad они также могут использоваться для управления содержимым popover и split views, а также полного экрана.

В моем дизайне в центре экрана будет отображаться множество очень сложных видов, каждый со своим собственным UIViewController, в квадрате размером с iPhone. Это было бы тривиально, если бы я использовал popover, но я не хочу, чтобы с ним была стрелка или черная рамка.

Я подумал о двух возможностях для решения этой ситуации:

  • Места контроллеров просмотра в новом UIWindow
  • Используйте классы контроллеров, которые не наследуются от UIViewController для этих взглядов

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

ответ

2

Я использую классы контроллеров, которые не наследуются от UIViewController. Неспособность гнездовать фактические контроллеры представлений произвольно в иерархии пользовательского интерфейса является неудачной несправедливостью в SDK, но я обнаружил, что даже с искусственными контроллерами реальной сложности разумно управлять. Я просто проверяю критические сообщения от реального корневого контроллера по мере необходимости и структурирую код так же, как если бы это был реальный контроллер представления. Это в основном рекомендация Apple. (Невозможно найти ссылку на doc в данный момент.)

Если у вас есть ДОЛЖЕННЫЕ подвидные управляемые виды, подобные этому, возможно, вы создали бы красиво гибкий класс MyViewController, который наследуется от NSObject, а затем MyBaseViewController, который наследует от UIViewController, который знает, как создавать MyViewControllers и настраивает для вас все сообщения. (Мне еще не нужен этот уровень абстракции.)

Использование UIWindows с размерами экрана не является стандартным решением, и я бы с осторожностью относился к нему. Точно так же не пытайтесь просто наброситься вперед и использовать UIViewControllers в любом случае.Вы обнаружите, что если вы это сделаете, они будут иногда себя вести и иногда ошибаться, и вы будете тратить много времени на разбор этого хрупкого взаимодействия.

0

Вы можете поместить UINavigationController внутри пирог

+0

Как я уже сказал, я не хочу использовать popover из-за его стиля (черная рамка и стрелка). – titaniumdecoy 2010-11-23 19:00:51

1

Из личного опыта я предлагаю следующее:

Для каждого «логической единицы», или модуль, например, список сообщений, сообщение View Composer и папку список; создать свой собственный UIViewController и .nib-файл.

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

Имейте один «главный контроллер», который отслеживает все экземпляры всех представлений и как/когда они отображаются.

Для меня это спасло много головной боли, особенно если вы хотите использовать большую часть того же кода для iPhone и iPad.

Overview

+0

Это прекрасно, но как вы показываете представление со своим UIViewController в прямоугольнике, который не заполняет экран (без использования popover)? – titaniumdecoy 2010-11-23 19:03:02

+0

Каждый UIViewController имеет свойство «view». Это связано с соответствующим UIView в файле .nib для каждого «модуля». Если вы хотите добавить это конкретное представление в другое представление, вы можете вызвать «[myMainView addSubview: myModuleController.view]». После этого вы используете свойство «frame» для определения прямоугольника для только что добавленного представления. – BastiBen 2010-11-23 19:06:20

Смежные вопросы