Да, это вполне возможно сделать. Да, вы должны использовать контроллеры представления, но вам не нужно. Это строго стилистический выбор. Если вы не используете контроллер представления, тогда вся логика контроллера, вероятно, будет в вашем контроллере с одним окном. Это может быть больно для большого приложения. Контроллеры представления помогают вам разбить ваш пользовательский интерфейс на логические компоненты и блоки управления.
Вы бы применили метод контроллера вида следующим образом:
- Создайте отдельные xibs для каждого из ваших представлений компонентов.
- Для каждого xib создайте подкласс контроллера представления, который загружает, владеет им и управляет им.
- Вы можете пойти дальше с этим и иметь контроллеры подвидов для отдельных областей в пределах видов.
- В своем классе awakeFromNib вашего оконного контроллера создайте экземпляры всех ваших контроллеров представления верхнего уровня.
Теперь у вас есть базовая структура для приложения с несколькими контроллерами представления верхнего уровня. Отсюда задача состоит в том, чтобы расположить представления в главном окне так, как вам нужно или как диктует пользовательский ввод. Иногда у вас может быть 3-4 вида верхнего уровня, иногда 1, и в вашем случае вы просто хотите поменять одно на другое. Между этими сценариями нет большой разницы.
Есть много способов достичь этого.
Для вашего конкретного случая, простой способ это сделать:
- Используйте представление таблиц верхнего уровня и вкладок без полей и установите выбранную вкладку программно.
В общем, вы можете сделать кучу вещей:
- Вручную упорядочить вложенные представления в представлении содержимого главного окна.
- Перемещение (анимация) вложенных видов в / из или в видимой области по мере необходимости.
- Используйте разделенные виды в главном окне, чтобы свернуть и развернуть области, которые вы хотите или не хотите показывать.
Кстати, этот метод работает независимо от того, создаете ли вы приложение на основе документа или нет, или это приложение на основе одного окна или нескольких окон.
Единственным недостатком использования контроллеров представления является большая часть макета представления верхнего уровня, и управление должно осуществляться программно, а не в IB. Но это не так сложно.
Обычно вам просто нужно сделать addSubview: и setFrame:, чтобы разместить ваши представления в родительском представлении, которое вы уже выложили в IB.
Но чтобы делать более сложные и ручные вещи, вы должны прочитать документы и узнать, как работают следующие: рамки / границы, перевернутые координаты, автоизменение размера и как переопределить автоизменение размера для создания собственных макетов.