Need to override drawrect if your UIView is merely a container?

Posted by Greg Maletic on Stack Overflow See other posts from Stack Overflow or by Greg Maletic
Published on 2010-06-03T00:34:33Z Indexed on 2010/06/03 0:44 UTC
Read the original article Hit count: 1150

Filed under:
|
|

According to Apple's docs, "Subclasses need not override -[UIView drawRect:] if the subclass is a container for other views."

I have a custom UIView subclass that is indeed merely a container for other views. Yet the contained views aren't getting drawn. Here's the pertinent code that sets up the custom UIView subclass:

- (id)initWithFrame:(CGRect)frame
{
    if ((self = [super initWithFrame:frame]))
    {
        // Consists of both an "on" light and an "off" light. We flick between the two depending upon our state.
        self.onLight = [[[LoyaltyCardNumberView alloc] initWithFrame:frame] autorelease];
        self.onLight.backgroundColor = [UIColor clearColor];
        self.onLight.on = YES;
        [self addSubview:self.onLight];

        self.offLight = [[[LoyaltyCardNumberView alloc] initWithFrame:frame] autorelease];
        self.offLight.backgroundColor = [UIColor clearColor];
        self.offLight.on = NO;
        [self addSubview:self.offLight];

        self.on = NO;
    }
    return self;
}

When I run the code that displays this custom UIView, nothing shows up. But when I add a drawRect method...

    - (void)drawRect:(CGRect)rect
    {
        [self.onLight drawRect:rect];
        [self.offLight drawRect:rect];
    }

...the subviews display. (Clearly, this isn't the right way to be doing this, not only because it's contrary to what the docs say, but because it -always- displays both subviews, completely ignoring some other code in my UIView that sets the hidden property of one of the views, it ignores the z-ordering, etc.)

Anyway, the main question: why don't my subviews display when I'm not overriding drawRect:?

Thanks!

© Stack Overflow or respective owner

Related posts about iphone

Related posts about uiview