在IB中实例化时NSView的背景颜色

时间:2011-07-09 23:37:44

标签: objective-c cocoa interface-builder

我希望能够设置我的观点的背景。目前我尝试通过覆盖 - (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

2 个答案:

答案 0 :(得分:2)

您的‑drawRect:方法存在一些问题。首先,除非有非常具体的理由,否则您不需要(也不应该)调用super的{​​{1}}实现。 ‑drawRect:的默认实现没有任何作用,所以在这种情况下它只是一个浪费的消息,但你应该摆脱这个习惯。

其次,在绘制覆盖整个视图的内容时,通常应忽略传入的脏矩形,并使用‑drawRect:绘制背景,并将矩形传递给[self bounds]

如果您要链接10.6 SDK或更高版本,您只需设置视图的NSRectFill()属性,而不是自己绘制背景。早期的SDK不支持此属性。

答案 1 :(得分:-4)

为什么不尝试在init时将backgroundColor属性设置为[NSColor greenColor] self.backgroundColor = [NSColor greenColor];