Назначение UIViewController - PullRequest
7 голосов
/ 05 января 2009

В настоящее время я изучаю Objective-C, пришедший из Java-среды, где у меня нет проблем с созданием GUI-приложений. Таким образом, способ, которым я думаю о некоторых из этих проблем, может быть немного неправильным. Вот вопрос (прошу прощения за проступок) -

Какова цель UIViewController?

Позвольте мне привести конкретный пример. Допустим, вы создаете приложение с одним представлением, которое использует кучу графических виджетов. Вы можете выложить их вручную в коде или использовать InterfaceBuilder. В других языках, таких как Java и HTML, я всегда кодирую вещи вручную и не использую инструменты с графическим интерфейсом, так как я обнаружил, что они не позволяют мне выполнять необходимые настройки. Сказав это, Я слышал, что InterfaceBuilder - это Сладость (делают ли эксперты это вручную?) . Допустим, я выложил кучу виджетов в XIB-файл и затем хочу загрузить этот UIView в коде.

Мне кажется (я ошибаюсь?), Что для требуется , чтобы использовать UIViewController для правильного отсоединения UIView , но для целей моих приложений, Я не пользуюсь самим контроллером (давайте оставим MVC здесь на минуту). Так нужно ли мне создавать UIViewController для этого простого приложения с одним просмотром?

Давайте расширим это на случай приложения с двумя UIView. В этом случае у меня есть приложение с двумя представлениями, одно из которых полностью настраиваемое, без виджетов (drawRect здесь я приду), а другое представление является виджет-тактическим (настройки и т. Д.). Я хочу иметь возможность поменять местами представления, одно из которых я создал в IB, а другое - чистый код. Я создаю пользовательский UIView следующим образом:

eyesView = [[EyesView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];")

В случае вида виджета я использую:

settingsView = (SettingsView *)[[[UIViewController alloc] initWithNibName:@"SettingsView" bundle:nil] view];

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

Есть ли лучший способ сделать все это?

1 Ответ

8 голосов
/ 05 января 2009

UIViewController является де-факто классом Controller и именно там должна находиться ваша бизнес-логика (либо здесь, либо в других классах стиля контроллера). Если вы не знакомы с шаблоном проектирования Model-View-Controller, вам следует прочитать о нем.

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

Технически, можно загрузить перо вручную, используя низкоуровневую архитектуру загрузки перьев, но вам все еще нужен некоторый объект, чтобы действовать как владелец файла, и нет веских причин для этого если вы действительно точно не знаете, что делаете. Тем более, что UIViewController предоставляет вам много халявы, например, он управляет памятью для всех корневых объектов в nib для вас и может выгружать свое представление под давлением памяти, если оно не используется (а затем повторно загружать его, когда доступ снова).

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