使用IB从视图控制器的视图加载XIB自定义UIView

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

我只在MyCustomUIView.m覆盖initWithFrame:方法如下:

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

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

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

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

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

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

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

基本上规则是,视图控制器来自哪里并没有什么区别,它会按照相同的顺序来查看它的视图,正如我在书中所解释的:

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

并在这个networking广播中:

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