У меня есть подкласс "s" UIView. Я хочу поместить некоторые кнопки и метки на s. Как связать мой подкласс UIView с файлом nib?
Как связать файл nib (.xib) с UIView?
Ответ 1
- В интерфейсе Builder создайте новый
xib с шаблоном просмотра.
- Нажмите на представление в списке объектов в xib (вы также должны см. "Владелец файла" и "Сначала Ответчик ").
- Нажмите Cmd-4, чтобы открыть панель Identity инспектора.
- Введите название своего класса в Поле "Имя класса" и нажмите "Назад".
Вы должны иметь кнопки перетаскивания. Чтобы получить код от кода, используйте -[NSBundle loadNibNamed:owner:options:]
. Ваше представление должно быть первым объектом в возвращаемом массиве.
Ответ 2
В моем случае я не хотел, чтобы мой контроллер представления имел какие-либо знания IBOutlets из моего представления .xib. Я хотел, чтобы мой подкласс представления принадлежал IBOutlets. К сожалению, UIView не имеет метода initWithNibName:
, поэтому я создал свою собственную категорию.
Вот что я сделал:
- В IB нажмите на свой основной UIView, а в Identity Inspector установите класс в свой подкласс
- В IB нажмите "File Owner" и в "Identity Inspector" установите класс в ваш подкласс
- Используйте новый метод
initWithNibName:
для создания вашего представления.
И вот категория, которую я создал:
- (instancetype)initWithNibName:(NSString *)nibName
{
NSArray *arrayOfViews = [[NSBundle mainBundle] loadNibNamed:nibName owner:self options:nil];
if (arrayOfViews.count < 1) {
return nil;
}
self = arrayOfViews[0];
return self;
}
Вдохновленный этот пост.
Обратите внимание, что пока кадр будет автоматически настраиваться, поэтому, в отличие от кода в сообщении, мне еще не нужно явно устанавливать кадр.
Кроме того, в отличие от почтового кода мне нужно было установить owner:self
, чтобы IBOutlets были правильно подключены.