Objective-c – setting self of UIView background color

objective cuiview

i'm trying to do this from inside the .m of a custom view class that is not being loaded from the XIB, but rather programmatically:

- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
    // Initialization code

    self.backgroundColor=[UIColor redcolor];
}
return self;
}

i have the same result whether i put the background color in the initWithFrame or other methods. the background color property doesn't take. from the controller, which owns this custom view, i can set the background color fine, with:

self.mycustomview.backgroundColor=[UIColor redcolor];

But I'd like to do this from within the custom view itself, keep stuff like this independent. both the controller and the custom view import UIKit.

I also tried this, which was available from Code Sense:

    self.View.backgroundColor=[UIColor redcolor];

but that doesn't work either. i tried both view and View here. I'm sure I'm overlooking something very obvious.

in the view controller i have this, and it works fine. the custom view is called "mapButtons.h":

- (void)viewDidLoad
{
CGRect frame=CGRectMake(0, 0, 320, 460);
self.mapButtons=[[mapButtons alloc] initWithFrame:frame];
self.mapButtons.backgroundColor=[UIColor redColor];

[self.view addSubview:self.mapButtons];

the .h of the custom view is this:

#import <UIKit/UIKit.h>

@interface mapButtons : UIView

Best Answer

If your view is getting created from a XIB (i.e. you added it to some other view using Interface Builder), -initWithFrame: is not going to get called. An object being loaded from a XIB receives -initWithCoder: instead. Try this:

- (id)initWithCoder:(NSCoder *)coder
{
    self = [super initWithCoder:coder];

    if(self)
    {
        self.backgroundColor = [UIColor redColor];
    }

    return self;
}
Related Topic