UIView子类默认属性

时间:2009-09-23 17:04:31

标签: iphone cocoa-touch uiview

为UIView子类的属性设置默认值的正确方法是什么?

虽然我还没有使用它们,但如果XIB提供了一个值,我希望它覆盖默认值。但是如果XIB没有提供值,我想要我的默认值。

在这种情况下,我正在考虑具体的CGFloat值。虽然它可以设置为0.0,但这不是一个有用的默认值,因此在我的代码中检查值为0.0并将其替换为更好的值是我宁愿避免的。

2 个答案:

答案 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;
}