【问题标题】:initWithNibName VS NSBundle's loadNibNamedinitWithNibName VS NSBundle 的 loadNibNamed
【发布时间】:2010-12-14 19:40:54
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: iphone objective-c cocoa-touch uitableview nib


    【解决方案1】:

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

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

    我不知道UIView 中有任何笔尖加载。

    【讨论】:

      【解决方案2】:

      如果您的标题的视图控制器包含 IBOutlets 到 nib 文件中的任何字段,则最好加载 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;
      }
      

      【讨论】:

      • 如果可以的话,我会投票给你 100 分。你的回答真的帮助了我 - 解决了 2 个问题。我还需要在选项中包含一个 NSDictionary。谢谢!!!!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-06
      • 1970-01-01
      • 2012-09-22
      • 1970-01-01
      • 1970-01-01
      • 2012-02-21
      相关资源
      最近更新 更多