简体   繁体   中英

UIView subclasses default properties

What's the proper way to set a default value for a UIView subclass's property?

Although I'm not using them yet, if the XIB provides a value I'd like it to override the default. But if the XIB doesn't provide a value, I'd like my default value.

In this case, I'm thinking of a CGFloat value specifically. While it could be set to 0.0 this isn't a useful default, so checking for a value of 0.0 in my code and replacing it with a better value is something I'd rather avoid.

Implement initWithFrame: in your subclass and set the property there.

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

This designated initializer only executes if the view is constructed in code. If the view comes from a nib file, it will get initialized using initWithCoder:, which modifies the attributes to match the attributes in the nib file. To handle this case you can override initWithCoder:, test to see if the attribute is set to its default value, and if so, change it:

- (id)initWithCoder:(NSCoder *)decoder {
    if (self = [super initWithCoder:decoder]) {
        if (self.alpha == 1.0) {
            self.alpha = 0.20;
        }
    }
    return self;
}

If it's your own custom property then the XIB should be setting it to zero.

Therefore, as @cduhn said, you can modify it in:

- (id)initWithCoder:(NSCoder *)decoder {
    if (self = [super initWithCoder:decoder]) {
        lineWidth = 12; // whatever value you want
    }
    return self;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM