2009-11-09 75 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