2009-11-09 32 views
15

我注意到,有兩種不同的方式來加載筆尖/ XIB文件:initWithNibName VS一個NSBundle的loadNibNamed

  1. 通過的UIView的initWithNibName:bundle:方法
  2. 一個NSBundle的loadNibNamed:owner:options:方法。

有人可以解釋這兩者之間的差異,以及何時使用兩者之間的更合適以及在什麼情況下?例如,如果我從tableView:viewForHeaderInSection:方法中的一個nib文件加載自定義表節標題視圖,我將使用哪一個?或者,如果我從nib文件加載自定義表格視圖單元格,我會使用哪一個?

回答

10

NSBundle的方法是用於解壓縮NIB的通用API。他們做了實際的工作(連同NSNib)。

UIViewControllerinitWithNibName:bundle:另一方面是一種初始化視圖控制器(可能)從一個筆尖加載其視圖的方法。該方法本身並不加載該筆尖,而只是記下該名稱。當請求視圖時,控制器懶惰地加載筆尖。

我不知道在UIView中有任何nib加載。

7

如果您的標頭的視圖控制器包含IBOutlets到nib文件中的任何字段,則最好加載nip文件而不是調用initWithNib。 在頭文件的視圖控制器中修改啓動語句如下。默認語句被註釋掉。
通過這樣做,您將能夠使用IBoutlets訪問nib文件中的字段。

- (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。謝謝!!!! – 2012-06-22 02:44:43