2009-11-09 4 views
15

Я заметил, что есть два различных способа загрузки NIB/XIb файлы:loadNibNamed initWithNibName VS NSBundle в

  1. через initWithNibName:bundle: метода UIView в
  2. loadNibNamed:owner:options: метод
  3. NSBundle в.

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

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

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

ответ

10

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

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

Я не знаю ни одной загрузки ниба в UIView.

7

Если контроллер представления вашего заголовка содержит 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; 

}

+2

Я голосовал бы вас 100, если я мог. Ваш ответ действительно помог мне - решил 2 проблемы. Мне также необходимо включить NSDictionary с параметрами. Благодаря!!!! –