В моем случае я не хотел, чтобы мой контроллер представления знал о IBOutlets из .xib моего представления. Я хотел, чтобы мой подкласс просмотра владел IBOutlets. К сожалению, в UIView нет метода initWithNibName:
, поэтому я просто создал собственную категорию.
Вот что я сделал:
- В IB нажмите на свой основной UIView, а в Identity Inspector установите класс на свой подкласс
- В IB нажмите на «Владелец файла», а в инспекторе удостоверений установите класс для своего подкласса
- Используйте новый метод категории
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 были правильно подключены.