Вложение пользовательских классов / XIB с помощью Interface Builder - PullRequest
9 голосов
/ 17 ноября 2009

Я постараюсь сделать это как можно короче.

Я написал собственный класс, который расширяет UIView парой свойств IBOutlet, и с ним связан XIB, с которым связаны эти IBOutlets.

Затем я хочу взять этот класс, внедрить его в какой-нибудь другой XIB (например, ячейку таблицы) и просто заставить его работать.

Кажется, что когда я встраиваю этот пользовательский класс в новый XIB, он не распознает исходный XIB, который я с ним связал, поэтому он просит меня сбросить IBOutlets для элементов интерфейса на новом XIB. Это хромой.

Кто-нибудь понимает, что я пытаюсь сделать, и у меня хороший подход?

Ответы [ 2 ]

8 голосов
/ 01 октября 2010

Вот как мне удалось сделать эту работу:

В Интерфейсном Разработчике
Откройте свое внешнее перо и сделайте это:

  • Добавьте UIView, чтобы определить пространство, где вы хотите, чтобы ваш внутренний перо отображалось.
  • Добавьте объект UIViewController из библиотеки, задайте для его свойства Nib Name имя вашего внутреннего файла пера (без расширения).
  • Создайте IBOutlets для этих двух элементов в вашем внешнем контроллере вида и подключите их. (Я буду ссылаться на них как innerView и innerViewController .)
  • Не подключайте никакие IBOutlets, определенные в вашем внутреннем контроллере вида, ни к чему в вашем внешнем файле пера, просто оставьте их неподключенными.

В Xcode
В методе viewDidLoad вашего внешнего контроллера добавьте две строки:

[self.innerView addSubview:self.innerViewController.view];
self.innerViewController.view.frame = CGRectMake(0, 0, self.innerView.frame.size.width, self.innerView.frame.size.height);

Если ваш внешний кончик является пользовательским UITableViewCell, поместите эти строки в ваш метод awakeFromNib .

Build & Run!

1 голос
/ 17 ноября 2009

Я предполагаю, что вы просто помещаете UIViews в перо для использования UIViewController, который находится исключительно в коде. Apple называет это отдельным файлом nib .

Следуйте инструкциям, с которыми я связан, для получения подробной информации и примера того, как заставить это работать.

Что касается встраивания представления в другое в Интерфейсном Разработчике, вам необходимо добавить элемент UIView из Библиотеки в родительское представление и установить его класс в Инспекторе . Как только класс встроенного представления установлен, ваши IBOutlets должны быть видны.

...