2010-05-24 2 views
0

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

Во-первых, могу ли я сказать, что для каждого вида должен быть контроллер вида? И для каждого контроллера представлений должен быть делегат для этого?

Также, какова роль mainWindow.nib? Большинство учебных пособий, которые я прочитал, похоже, вообще не касаются этого ножа. То, что всегда происходит, это настройка контроллера NavigationController в качестве корневого контроллера, который подталкивает другой ViewController к стеку, и этот ViewController будет иметь другой связанный с ним связанный с ним.

Могу ли я предположить, что я могу смело игнорировать главное окошко окна?

ответ

2

Это все о MVC (Model View Controller), innit?

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

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

Контролер, поэтому у вас есть, вероятно, некоторая работа, чтобы ваш графический интерфейс мог представлять вашу модель. Вам нужны некоторые контроллеры. Сколько? Однако многие из вас управляемы. Если бы у вас было представление, содержащее 2 подпункта, каждому из них нужен контроллер вида? Нет, наверное, нет. Насколько сложным является ваш код для подключения представления к модели?

Некоторые шаблоны GUI настолько распространены, что Apple даже написала для вас код контроллера. EG контроллер для UINavigationBar, UINavigationController. Итак, если ваше приложение имеет иерархические представления, которые вам нужно перемещаться, и вам нужно отобразить панель навигации, вы можете использовать экземпляр UINavigationController вместо написания своего собственного класса. Ура!

Несомненно, код UINavigationController (или любой другой viewController) не может волшебным образом узнать, как интегрироваться с нашей моделью, с нашей точки зрения, не так ли? НЕТ, он не может. В целом в Cocoa, если есть некоторый класс объекта, который в основном работает с полки , а также имеет опционально настраиваемое поведение, что позволяет нам адаптировать его к нашим потребностям - это делается Делегация. т.е. Instead подкласса UINavigationController, мы сообщим конкретный экземпляр, где найти (при отсутствии лучшего термина) это обычное поведение.

Почему? Допустим, у вас есть navigationController, tableView и текстовое поле. UINavigationController в основном заботится о ваших потребностях в навигации, но каждый раз, когда пользователь переходит на новое представление, вы должны иметь сумасшедшую звуковую звуковую дорожку QUACK. UITableView - это, в основном, все, что вам нужно из таблицы, ИСКЛЮЧАЕТЕ, что вы действительно хотите, чтобы третья строка в таблице на первой странице была в два раза больше высоты других строк. И стандартный, готовый UITextField в значительной степени заботится о ваших потребностях в текстовом поле. EXCEPT вам нужно, чтобы ваше текстовое поле было доступно только для редактирования, когда пользователь обращается к северу. Один из способов справиться с этим - создать 3 новых класса, пользовательский UINavigationController, пользовательский tableView и настраиваемое текстовое поле и использовать их вместо этого.С делегацией мы могли бы использовать классы как есть, и один объект был делегатом из всех трех экземпляров - намного более чистым.

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

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