2011-07-09 93 views
0

實例化時,我想可以設置自己的看法的背景。目前,我試圖通過覆蓋做到這一點 - (空)的drawRect:(的NSRect)dirtyRect像建議here,所以我的自定義視圖看起來是這樣的:背景顏色的NSView在IB

@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 

當我擊築的運行的觀點出現在默認的灰色背景,但是當我調整窗口大小時,視圖顯示爲所需的綠色。

是否有人知道我缺少的是什麼?我不確定它是否相關,但視圖存儲在筆尖中。在YES awakeFromNib,但它並沒有幫助:我已經打過電話給setNeedsDisplay。

THX提前, 葉夫根尼·

回答

2

有一些問題,你‑drawRect:方法設置backgroundColor屬性爲[NSColor綠彩。首先,你不需要(也不應該)調用super‑drawRect:的實現,除非有非常具體的理由這樣做。 ‑drawRect:的默認實現什麼都不做,所以在這種情況下它只是一個浪費的消息,但你應該擺脫這種習慣。其次,繪製覆蓋整個視圖的東西時,通常應忽略傳入的髒矩形,並使用[self bounds]作爲矩形傳遞給NSRectFill()來繪製背景。

如果您鏈接針對10.6 SDK或以上,你可以設置視圖的backgroundColor屬性,而不是繪製自己的背景。較早的SDK不支持此屬性。

+0

我想我必須調用_ [super drawRect:dirtyRect] _來獲取我的子視圖,但它似乎是不必要的 - thx。 – Yevgeniy

+0

設置背景像[self setBackground:aColor]工作 - thx。我記得以前的版本,NSView沒有響應setBackground。 – Yevgeniy

+0

我只注意到用_ [self setBackgroundColor:aColor] _設置backgroundColor只是因爲我之前實現它並忘記了它。在我刪除了我自己的屬性(backgroundColor)後,NSView停止了對_setBackgroundColor_的響應,雖然我的鏈接是10.6。 我原來的問題是與我使用[NSColor _sourceListBackgroundColor]作爲我的顏色(不是綠色,如上例)一樣。我發佈的代碼很適合像[NSColor greenColor]這樣的顏色。無論如何,Thx Rob和大家。 – Yevgeniy

-4

你爲什麼不嘗試在初始化 self.backgroundColor = [NSColor greenColor];

+0

NSViews沒有backgroundColor屬性。你可能會想到UIView(iOS)。 – Olie