Rit*_*its 11 iphone cocoa-touch objective-c uikit
我有一个UIView的子类,它在XIB文件中实例化.我需要它做一些初始化(设置一些变量和创建子视图).
但是,我并不总是通过Interface Builder实例化此视图.我也是以编程方式完成的.在这两种情况下,初始化都需要相同.
我指定的初始化程序是initWithValues:.
问题是; 我在哪里进行初始化?
由于我必须在两个不同的位置执行它,我想我需要在一个单独的initialize方法(或类似的东西)中重构它,并从中调用它initWithValues:.
不过从IB加载时,无论是initWithCoder:和awakeFromNib被调用.我必须从哪个方法打电话initialize?或者我必须打电话initWithValues:给initWithCoder:什么都不做awakeFromNib?
nac*_*o4d 17
您应该initWithFrame:在初始化视图时使用(因为它是指定的初始化程序).因此,如果您initWithValues:确保initWithFrame:从中拨打电话.
这样的东西应该用于初始化:;)
- (void)initialize{
//init your ivars here
}
- (id)initWithCoder:(NSCoder *)aCoder{
if(self = [super initWithCoder:aCoder]){
[self initialize];
}
return self;
}
- (id)initWithFrame:(CGRect)rect{
if(self = [super initWithFrame:rect]){
[self initialize];
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
我打算补充说明,但是mplappert的答案很清楚.awakeFromNib必要时使用.
mpl*_*ert 10
这取决于您需要初始化的内容.一旦awakeFromNib被调用,您的视图的所有出口和操作连接都会建立,而不是这样initWithCoder:.因此,如果您需要依赖这些连接,请使用awakeFromNib.否则,您可以安全地进行所有初始化initWithCoder:.
| 归档时间: |
|
| 查看次数: |
17462 次 |
| 最近记录: |