为 UIView 子类的属性设置默认值的正确方法是什么?
虽然我还没有使用它们,但如果 XIB 提供了一个值,我希望它能够覆盖默认值。但如果 XIB 未提供值,我需要默认值。
在本例中,我专门考虑了 CGFloat 值。虽然它可以设置为 0.0,但这不是一个有用的默认值,因此我宁愿避免在代码中检查 0.0 值并将其替换为更好的值。
最佳答案
在您的子类中实现 initWithFrame: 并在那里设置属性。
- (id)initWithFrame:(CGRect)aRect {
if (self = [super initWithFrame:aRect]) {
// Set whatever properties you want. For example...
self.alpha = 0.75;
}
return self;
}
只有在代码中构造 View 时,此指定的初始值设定项才会执行。如果 View 来自 nib 文件,它将使用 initWithCoder: 进行初始化,这会修改属性以匹配 nib 文件中的属性。要处理这种情况,您可以重写 initWithCoder:,测试该属性是否设置为其默认值,如果是,则更改它:
- (id)initWithCoder:(NSCoder *)decoder {
if (self = [super initWithCoder:decoder]) {
if (self.alpha == 1.0) {
self.alpha = 0.20;
}
}
return self;
}
关于iphone - UIView子类默认属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1467361/