我有一个使用接口构建器构建的自定义UIView
(MyCustomUIView
)。我想将此自定义视图放在MyViewController
的视图中,该视图也是使用IB设计的。我已经将UIView
作为MyViewController
的XIB中的子视图放置为一个子视图,并将其类别设置为MyCustomUIView
。问题是,当我运行代码时,只会出现空白视图。(当我在代码中实例化MyCustomUIView
时,它显示得很好。)
我只覆盖initWithFrame:
方法MyCustomUIView.m
中的以下方式:
- (id)initWithFrame:(CGRect)frame
{
[[NSBundle mainBundle] loadNibNamed:@"MyCustomUIView" owner:self options:nil];
self = self.view;
return self;
}
我该怎么做才能正确地使视图负载正确?initWithCoder:
应该如何?
您是正确的。IB使用initwithCoder。InitwithCoder看起来应该与您的其他初始化方法非常相似:
- (id)initWithCoder:(NSCoder *)aDecoder {
self = [super initWithCoder:aDecoder];
if (self) {
// CUSTOM INITIALIZATION HERE
}
return self;
}
一旦在IB中分配了课程,除非我误解了您的意图,否则您无需从捆绑包中实例化。
在IB中的视图控制器的视图部分中不要放置任何内容。相反,将IB中的视图控制器的NIB名称设置为包含视图的笔尖的名称。在包含视图的笔尖中,将文件的所有者设置为视图控制器类,然后将其view
属性连接到视图。
结果将是,当视图控制器实例化时,如果它是从NIB实例化的(您没有证明是真正会发生的事情,但请说是),它将找到笔尖并加载。视图。
基本上,规则是,在视图控制器来自的地方没有区别,它将通过同一顺序进行相同的步骤,如我在书中所解释的那样:
http://www.apeth.com/iosbook/ch19.html#_view_controller_and_view_creation
在此网络广播中:
http://www.youtube.com/watch?v=ziufckpdiro