为UIView子类的属性设置默认值的正确方法是什么?
虽然我还没有使用它们,但如果XIB提供了一个值,我希望它覆盖默认值。但是如果XIB没有提供值,我想要我的默认值。
在这种情况下,我正在考虑具体的CGFloat值。虽然它可以设置为0.0,但这不是一个有用的默认值,因此在我的代码中检查值为0.0并将其替换为更好的值是我宁愿避免的。
答案 0 :(得分:6)
在子类中实现initWithFrame:并在那里设置属性。
- (id)initWithFrame:(CGRect)aRect {
if (self = [super initWithFrame:aRect]) {
// Set whatever properties you want. For example...
self.alpha = 0.75;
}
return self;
}
只有在代码中构造视图时,才会执行此指定的初始值设定项。如果视图来自nib文件,它将使用initWithCoder:初始化,它修改属性以匹配nib文件中的属性。要处理这种情况,您可以覆盖initWithCoder:,test以查看属性是否设置为其默认值,如果是,请更改它:
- (id)initWithCoder:(NSCoder *)decoder {
if (self = [super initWithCoder:decoder]) {
if (self.alpha == 1.0) {
self.alpha = 0.20;
}
}
return self;
}
答案 1 :(得分:1)
如果它是您自己的自定义属性,则XIB应将其设置为零。
因此,正如@cduhn所说,您可以在以下位置修改它:
- (id)initWithCoder:(NSCoder *)decoder {
if (self = [super initWithCoder:decoder]) {
lineWidth = 12; // whatever value you want
}
return self;
}