initWithNibName VS NSBundle的loadNibNamed

tbe*_*nin 17 iphone cocoa-touch objective-c uitableview nib

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

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

有人可以解释这两者之间的差异,以及何时使用一个而不是另一个以及在什么情况下更合适?

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

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

Nik*_*uhe 12

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

UIViewControllerinitWithNibName:bundle:另一方面是初始化从笔尖,其中(可能)加载其视图的视图控制器的一种方法.该方法本身不会加载笔尖,只需记下名称即可.在请求视图时,控制器会懒惰地加载笔尖.

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


pra*_*jul 9

如果标题的视图控制器包含nib文件中任何字段的IBOutlets,最好加载nib文件而不是调用initWithNib.在头文件的视图控制器中,将init语句修改为以下内容.默认语句被注释掉.
通过这样做,您将能够使用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;
}
Run Code Online (Sandbox Code Playgroud)

  • 如果可以的话,我会投票给你100.你的答案真的帮了我 - 解决了2个问题.我还需要在选项中包含一个NSDictionary.谢谢!!!! (2认同)