我有一个使用Interface Builder构建的自定义UIView
(MyCustomUIView
)。我想将此自定义视图放在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:
应该怎么样?
答案 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
并在此网络广播中: