如何将nib(.xib)文件与UIView关联?

时间:2008-10-26 21:04:06

标签: iphone

我有一个UIView的子类“s”。我想在s上放一些按钮和标签。如何将我的UIView子类与nib文件相关联?

2 个答案:

答案 0 :(得分:28)

  1. 在Interface Builder中,创建一个新的 带有View模板的xib。
    • 点击列表中的视图 xib中的对象(你也应该 请参阅“文件所有者和” 响应者“)。
    • 按Cmd-4打开“身份”窗格 检查员。
    • 在中输入您的班级名称 “类名”字段并按回车。
  2. 您应该可以使用拖动按钮。要从代码获取nib,请使用-[NSBundle loadNibNamed:owner:options:]。您的视图应该是返回数组中的第一个对象。

答案 1 :(得分:3)

在我的情况下,我不希望我的视图控制器从我的视图的.xib中了解IBOutlets。我希望我的视图子类拥有IBOutlets。不幸的是,UIView没有initWithNibName:方法,因此我只创建了自己的类别。

这就是我的所作所为:

  • 在IB中,单击您的主UIView,并在Identity Inspector中,将类设置为您的子类
  • 在IB中,单击文件所有者,然后在Identity Inspector中将类设置为您的子类
  • 使用新的类别方法initWithNibName:来实例化您的视图。

这是我创建的类别:

- (instancetype)initWithNibName:(NSString *)nibName
{
    NSArray *arrayOfViews = [[NSBundle mainBundle] loadNibNamed:nibName owner:self options:nil];
    if (arrayOfViews.count < 1) {
        return nil;
    }

    self = arrayOfViews[0];

    return self;
}

this post的启发。

请注意,到目前为止,帧会自动调整,因此与帖子中的代码不同,我还没有明确设置帧。 此外,与帖子的代码不同,我需要设置owner:self,以便IBOutlets正确连接。