我希望能够设置我的观点的背景。目前我尝试通过覆盖 - (void)drawRect:(NSRect)dirtyRect 来建议here,所以我的自定义视图如下所示:
@implementation ViewWithBackgroundColor
- (id)initWithFrame:(NSRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// ...
}
return self;
}
- (void)dealloc
{
[super dealloc];
}
- (void)drawRect:(NSRect)dirtyRect
{
[super drawRect:dirtyRect];
[[NSColor greenColor] setFill];
NSRectFill(dirtyRect);
}
@end
当我点击构建运行时,视图显示在默认的灰色背景中,但是当我调整窗口大小时,视图将以所需的绿色显示。
有人知道我错过了什么吗?我不确定它是否相关,但视图存储在笔尖中。我已经尝试在 awakeFromNib 中调用 setNeedsDisplay:YES ,但它没有帮助。
提前thx, 选手Yevgeniy答案 0 :(得分:2)
您的‑drawRect:
方法存在一些问题。首先,除非有非常具体的理由,否则您不需要(也不应该)调用super
的{{1}}实现。 ‑drawRect:
的默认实现没有任何作用,所以在这种情况下它只是一个浪费的消息,但你应该摆脱这个习惯。
其次,在绘制覆盖整个视图的内容时,通常应忽略传入的脏矩形,并使用‑drawRect:
绘制背景,并将矩形传递给[self bounds]
。
如果您要链接10.6 SDK或更高版本,您只需设置视图的NSRectFill()
属性,而不是自己绘制背景。早期的SDK不支持此属性。
答案 1 :(得分:-4)
为什么不尝试在init时将backgroundColor属性设置为[NSColor greenColor]
self.backgroundColor = [NSColor greenColor];