InitWithNibName VS NSBundle loadNibNamed

Я заметил, что есть два разных способа загрузки файлов nib/xib:

  • с помощью метода UIView initWithNibName:bundle:
  • Метод NSBundle loadNibNamed:owner:options:.

Может кто-нибудь объяснить различия между этими двумя, и когда более целесообразно использовать один над другим и при каких обстоятельствах?

Например, если я загружаю вид заголовка пользовательского заголовка таблицы из файла nib в методе tableView: viewForHeaderInSection: какой из них я использовал?

Или, если бы я загружал пользовательскую ячейку вида таблицы из файла nib, какой из них я использовал?

Ответы

Ответ 1

NSBundle s - это общий API для использования для unarchiving NIB. Они выполняют фактическую работу (вместе с NSNib).

UIViewController s initWithNibName:bundle:, с другой стороны, является способом инициализации контроллера вида, который (может) загружает его представление из ниба. Метод сам не загружает наконечник, а просто принимает к сведению имя. Контроллер загружает ленту лениво, когда запрашивается представление.

Мне не известно о загрузке nib в UIView.

Ответ 2

Если ваш контроллер заголовка содержит IBOutlets для любых полей в файле nib, лучше будет загрузить файл nib вместо вызова initWithNib. В контроллере представления файла заголовка изменить инструкцию инициализации следующим образом. Заявление по умолчанию закомментировано.
Поступая таким образом, вы сможете получить доступ к полям в файле nib с помощью IBoutlets.

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    //self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    // Custom initialization.
if ([[NSBundle mainBundle] loadNibNamed:@"NibFile" owner:self options:nil]) {

}

return self;

}