Интерфейсный Разработчик. Как заменить Programatic ViewControllers на IB ViewControllers? - PullRequest
1 голос
/ 21 октября 2009

По мере того, как я все больше и больше перемещаю свою конструкцию пользовательского интерфейса из XCode в IB, остается одно препятствие, которое мне нужно преодолеть.

В настоящее время я создаю свои собственные viewControllers в XCode с пользовательскими инициализаторами. Как правило, они имеют набор иваров, которые устанавливаются во время инициализации с помощью переданных параметров. Я бы очень хотел перенести как можно больше в IB.

Может ли кто-нибудь внимательно объяснить мне - или, лучше, указать мне на код - как реплицировать подход XCode для передачи параметров через пользовательский инициализатор в IB - предположительно через IBOutlet.

Заранее спасибо.

Ура, Дуг

UPDATE:

Типичным сценарием является то, что мой AppDelegate выходит в сеть, захватывает некоторые данные - NSMutableData, а затем передает ссылку на корневой viewController - обычно TableViewController - который помещается в стек viewController навигационного контроллера.

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

Именно эту иерархическую передачу данных я хочу передать в IB.

Ответы [ 2 ]

3 голосов
/ 21 октября 2009

Вы все еще можете иметь собственный инициализатор. Однако внутри этой инициализированной вы будете называть -[initWithNibName:@"yourNibName" bundle:bundle]. Вы подключите переменные экземпляра UIKit (UILabel, UIButton и т. Д.) В Интерфейсном конструкторе и, следовательно, вам не нужно будет создавать экземпляры этих объектов в инициализаторе. Другие переменные экземпляра (строки, словари, пользовательские объекты и т. Д.) Вы будете создавать и устанавливать в инициализаторе.

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

Дайте мне знать, если вам нужна дополнительная информация.

2 голосов
/ 21 октября 2009

Допустим, у нас есть MyViewController, который расширяет UIViewController и MyViewControllerParameter, который является одним из наших пользовательских объектов, которые мы передаем в MyViewController при инициализации. MyViewController имеет IBOutlets типа MyViewControllerParameter, определенные в нем. Мы хотим поместить MyViewController в другое содержащее представление, ParentView.xib. ParentView.xib принадлежит ParentViewController.m и создан в другом месте. Дважды щелкните ParentView.xib в XCode, чтобы запустить Interface Builder. Затем мы перетаскиваем «объект» из представления библиотеки (я полагаю, что вы открываете представление библиотеки с помощью Cmd + Shift + L, если он по умолчанию не открыт) в окно документа. (Это окно активируется Cmd + 0.)

«Объект» - это произвольный виджет, найденный в библиотеке (помеченный значком куба из чистого золота), который может представлять что угодно в вашем проекте. После того, как мы поместили новый объект в окно документа, мы набираем Cmd + 4, чтобы открыть окно Indentity Inspector. В верхнем текстовом поле мы можем ввести имя параметра нашего контроллера представления, «MyViewControllerParameter». Затем мы находим виджет ViewController в библиотеке и помещаем его в окно документа. Мы открываем Инспектор атрибутов (Cmd + 1) и устанавливаем имя пера «MyView.xib». Это должно заставить CocoaTouch загрузить MyViewController, используя определения в «MyView.xib».

Откройте инспектор идентификации и установите для атрибута класса значение MyViewController. В последний раз мы щелкаем правой кнопкой мыши или контролируем щелчок (или касание двумя пальцами, если мы правильно настроили трекпад на нашем MacbookPro) MyViewController в окне документа. Это откроет окно, показывающее все IBOutlets в MyViewController. Перетащите линию из небольшого открытого кружка рядом с выходом MyViewControllerParameter и поместите ее на объект MyViewControllerParameter, расположенный в окне документа. Соединяя эти точки, вы устанавливаете параметры между объектами с помощью конструктора интерфейсов.

...