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;
}