19

我注意到有两种不同的方式来加载 nib/xib 文件:

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

有人可以解释这两者之间的区别,什么时候使用一个比另一个更合适,在什么情况下?

例如,如果我从 tableView:viewForHeaderInSection: 方法中的 nib 文件加载自定义表格节标题视图,我会使用哪一个?

或者,如果我从 nib 文件加载自定义表格视图单元格,我会使用哪一个?

4

2 回答 2

12

NSBundle的方法是用于取消归档 NIB 的通用 API。他们做实际的工作(一起NSNib)。

UIViewControllerinitWithNibName:bundle:另一方面,是一种初始化视图控制器的方法,该控制器(可能)从笔尖加载其视图。该方法本身并不加载笔尖,只是记下名称。当请求视图时,控制器会延迟加载 nib。

我不知道有任何笔尖加载到UIView.

于 2009-11-09T22:16:15.687 回答
10

如果标题的视图控制器包含 nib 文件中任何字段的 IBOutlets,则最好加载 nib文件而不是调用 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;
}
于 2012-02-21T12:00:50.780 回答