Разработчик интерфейсов.Как заменить программные ViewControllers на IB ViewControllers?

StackOverflow https://stackoverflow.com/questions/1601835

Вопрос

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

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

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

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

Приветствия, Даг

ОБНОВЛЯТЬ:

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

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

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

Это было полезно?

Решение

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

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

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

Другие советы

Допустим, у нас есть 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, расположенный в окне документа.Соединяя эти точки, вы устанавливаете параметры между объектами с помощью построителя интерфейсов.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top