UIViewController "внутри" UIView на iPad - PullRequest
2 голосов
/ 23 ноября 2010

Несмотря на заголовок этого вопроса, я хорошо знаю, что UIViewControllers нельзя размещать внутри UIViews.

Согласно документации Apple, UIViewControllers контролируют полный экран в приложениях iPhone. Однако на iPad их также можно использовать для управления содержимым всплывающих окон и разделенных видов, а также в полноэкранном режиме.

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

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

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

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

Ответы [ 3 ]

2 голосов
/ 23 ноября 2010

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

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

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

1 голос
/ 23 ноября 2010

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

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

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

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

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

Overview

0 голосов
/ 23 ноября 2010

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

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