Подтвердить что ты не робот

Как связать файл nib (.xib) с UIView?

У меня есть подкласс "s" UIView. Я хочу поместить некоторые кнопки и метки на s. Как связать мой подкласс UIView с файлом nib?

4b9b3361

Ответ 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 были правильно подключены.