7

我有一个使用 Interface Builder 构建的自定义UIView( )。MyCustomUIView我想把这个自定义视图放在MyViewController的视图中,它也是使用 IB 设计的。我在XIB 中放置了UIView一个子视图,MyViewController并将它的类设置为MyCustomUIView. 问题是,当我运行代码时,只出现一个空白视图。(当我在代码中实例化MyCustomUIView时,它显示得很好。)

我只是initWithFrame:通过以下方式覆盖该方法MyCustomUIView.m

- (id)initWithFrame:(CGRect)frame
{
    [[NSBundle mainBundle] loadNibNamed:@"MyCustomUIView" owner:self options:nil];
    self = self.view;
    return self;
}

我应该怎么做才能使视图正确加载?应该怎么initWithCoder:看?

4

2 回答 2

2

你是对的。IB 使用 initWithCoder。initWithCoder 看起来应该与您的其他 init 方法非常相似:

- (id)initWithCoder:(NSCoder *)aDecoder {
    self = [super initWithCoder:aDecoder];
    if (self) {
        // CUSTOM INITIALIZATION HERE
    }
    return self;
}

一旦你在 IB 中分配了你的类,你就不需要从包中实例化它,除非我误解了你的意图。

于 2012-11-02T17:44:50.773 回答
0

不要在 IB 中视图控制器的视图部分放置任何东西。相反,将 IB 中视图控制器的 nib 名称设置为包含视图的 nib 的名称。在包含视图的 nib 中,将文件的所有者设置为视图控制器类并将其view属性连接到视图。

结果将是,当视图控制器被实例化时,如果它是从 nib 实例化的(你还没有证明这是真正会发生的事情,但我们只是说它是),它将找到 nib 并从中加载视图它。

基本上规则是视图控制器的来源没有区别,它会以相同的顺序通过相同的步骤查找其视图,正如我在书中解释的那样:

http://www.aeth.com/iOSBook/ch19.html#_view_controller_and_view_creation

在这个网络广播中:

http://www.youtube.com/watch?v=zIufcKpDIRo

于 2012-11-02T19:11:32.420 回答