使用IB从View Controller的视图加载带有XIB的自定义UIView

时间:2012-11-02 17:00:26

标签: ios uiview xib nib initwithcoder

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

我只是在initWithFrame:中以下列方式覆盖MyCustomUIView.m方法:

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

如何正确加载视图? initWithCoder:应该怎么样?

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

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

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

基本上规则是视图控制器的来源没有区别,它将按照相同的顺序查看其视图,正如我在书中解释的那样:

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

并在此网络广播中:

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