我正在尝试从一个自定义视图类的.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];
但这也不起作用。我在这里尝试了view
和View
。我确定我忽略了一些非常明显的事情。
在视图控制器中我有这个,它工作正常。自定义视图称为“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
答案 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。