UIView子类默认属性

Ste*_*her 2 iphone cocoa-touch uiview

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

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

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

cdu*_*uhn 6

在您的子类中实现initWithFrame:并在那里设置属性.

- (id)initWithFrame:(CGRect)aRect {
    if (self = [super initWithFrame:aRect]) {
        // Set whatever properties you want.  For example...
        self.alpha = 0.75;
    }
    return self;
}
Run Code Online (Sandbox Code Playgroud)

只有在代码中构造视图时,才会执行此指定的初始值设定项.如果视图来自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;
}
Run Code Online (Sandbox Code Playgroud)