设置UIView背景颜色的自我

时间:2011-08-16 20:36:25

标签: objective-c uiview

我正在尝试从一个自定义视图类的.m内部执行此操作,该类是而不是从XIB加载,而是以编程方式加载:

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

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

我是否将相同的结果放在initWithFrame或其他方法中。背景颜色属性不需要。从拥有此自定义视图的控制器,我可以设置背景颜色,使用:

self.mycustomview.backgroundColor=[UIColor redcolor];

但是我想在自定义视图中做到这一点,保持这样的东西独立。控制器和自定义视图导入UIKit。

我也试过这个,可以从Code Sense获得:

    self.View.backgroundColor=[UIColor redcolor];

但这也不起作用。我在这里尝试了viewView。我确定我忽略了一些非常明显的事情。

在视图控制器中我有这个,它工作正常。自定义视图称为“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];

自定义视图的.h是这样的:

#import <UIKit/UIKit.h>

@interface mapButtons : UIView

2 个答案:

答案 0 :(得分:5)

如果您的视图是从XIB创建的(即您使用Interface Builder将其添加到其他视图中),则不会调用-initWithFrame:。从XIB加载的对象接收-initWithCoder:。试试这个:

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

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

    return self;
}

答案 1 :(得分:2)

我再次进行了测试,这是我正在做的工作的完整来源

// MapButtons.h
#import <UIKit/UIKit.h>

// As a note you normally define class names starting with a capital letter
// but I did test this with mapButtons as you had it
@interface MapButtons : UIView

@end

// MapButtons.m
#import "mapButtons.h"

@implementation mapButtons

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
      // Initialization code
      self.backgroundColor = [UIColor redColor];
    }
    return self;
}

@end

// TestAppDelegate.m
@implementation TestAppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{  
    MapButtons *view = [[MapButtons alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    [self.window addSubview:view];

    [self.window makeKeyAndVisible];
    return YES;
}

xcode不是自动完成的事实是奇怪的,但我似乎间歇性地有这个问题,所以我没有真正的解决方案。人们有时建议删除项目派生数据并重新启动xcode。