Быстро заблудиться с представлениями и контроллерами - PullRequest
0 голосов
/ 17 января 2012

Я пришел из Windows Visual Studio (VS), поэтому нахожу среду XCode слишком сложной из-за отсутствия лучшего описания.

Я планирую приложение, которое будетнужно 4 вида (что я бы назвал windows в VS).1) Основной (начальный) вид будет иметь панель инструментов внизу, которая открывает любой из 3 видов.2) В представлении A будет навигационная панель вверху для «Отмена» и «Готово», которая вернется в Main.3) Вид B будет иметь панель навигации вверху для «Назад», которая вернется к основному. 4) Вид C не будет иметь панели навигации, но вернется к основному с использованием DoubleTap.

Я нахожу этоочень запутанно соединить это вместе без простого примера.

Где я могу найти некоторые четкие объяснения Views vs Controllers, для чего они используются, и как их использовать, предпочтительно с примерами / учебными пособиями / и т. д.?

Онлайн лучше, книги в порядке.Я использую Xcode 4.2, раскадровки отсутствуют (для совместимости с ios 4.2).

Спасибо.

1 Ответ

4 голосов
/ 17 января 2012

Общее различие между контроллерами представления и представлением - это то, что вы можете понять независимо от Xcode / Cocoa - это шаблон проектирования, называемый MVC (Model, View, Controller).

В MVC структура вашего приложения разделена на 3 слоя:

1) Модель - это уровень данных, например файлы, базы данных, сетевые службы и объекты, которые существуют независимо от дисплея, например, пользователя.

2) Вид - это то, что вы видите на экране. Представление часто состоит из нескольких вложенных представлений в иерархии, например, окно (которое является видом представления) содержит панель инструментов (представление другого типа) и некоторые кнопки (каждое представление), метки, текстовые поля и т. Д. Это все взгляды.

3) Контроллер, или контроллер представления, - это клей, соединяющий эти два элемента. Пользовательский объект, например, не имеет представления о том, как отображать себя, а метка не знает о пользовательском объекте, поэтому задача контроллера представления состоит в том, чтобы сообщить конкретной метке для отображения имени конкретного пользователя. Точно так же, когда вы вводите текст в текстовое поле, текстовое поле не знает, что текст является паролем, поэтому задача контроллера состоит в том, чтобы взять этот текст и сохранить его в правильном месте, или отправить его в правильный веб-сервис. или что угодно.

Таким образом, в основном контроллер преобразует данные вашей модели в правильный формат для отображения в ваших представлениях, обрабатывает обратную связь от ваших представлений (нажатие кнопки, ввод текста и т. Д.) И соответственно изменяет вашу модель.

В какао каждый контроллер представления владеет основным видом (это свойство "view") и может также управлять подвидами этого представления, такими как кнопки, метки и т. Д.

Обычно на экране вашего приложения имеется один класс контроллера представления. Иногда части вашего экрана, которые имеют стандартное поведение, управляются другими контроллерами представления.

Так, например, навигационная панель управляется чем-то, называемым контроллером навигации. Контроллер навигации фактически управляет стеком контроллеров представления, а также самим представлением панели навигации. Когда вы помещаете или вставляете контроллер представления в стек контроллера навигации, он гарантирует, что представление из текущего контроллера представления отображается и что панель навигации показывает правильный заголовок. Когда вы нажимаете кнопку «Назад» в представлении панели навигации, контроллер навигации получает это событие кнопки и извлекает текущий контроллер (и связанный с ним вид) из стека.

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

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

Nibs / xibs особенно полезны для этого, потому что они позволяют визуально разметить ваши представления и визуально связать их действия (например, нажатия кнопок) с методами на вашем контроллере представления, используя перетаскивание. Это избавит вас от заполнения вашего контроллера представления бессмысленным кодом макета (создайте кнопку с этими координатами и этим цветом, прикрепите ее к этому подпредставлению и т. Д.). К сожалению, перья могут сбивать с толку новых разработчиков, потому что они скрывают многое из того, что происходит за кулисами.

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

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