2012-03-05 141 views
1

我想在NSForm中單獨設置單元格背景顏色。我認爲這將是NSForm的子類化並覆蓋-drawCellAtRow:column:。但-drawCellAtRow:column:只在細胞獲得焦點時被調用。如何更改NSForm中的單個單元格背景顏色?

我試過在NSForm上調用-setCellBackgroundColor,但這改變了標題背景,而不是值。

有沒有我找不到的方法?

回答

1

我認爲這對NSFormCell來說是不可能的。

我想的第一件事:

self.form.drawsCellBackground = YES; 
self.form.cellBackgroundColor = [NSColor redColor]; 

這似乎繪製背景僅次於標籤。一些進一步的測試表明,單個NSFormCell跨越標籤和文本字段,並且背景都在後面。當文本字段在頂部繪製時,它自己的背景會覆蓋紅色。

接下來我將子類NSFormCell。唯一要調用的方法是-drawWithFrame:inView:。該框架再次跨越標籤和文本字段。控制視圖是NSForm。如果我繪製自己的背景,然後調用[super drawWithFrame:inView:],它將如上所示,在標籤後面可見,但在文本字段後面不可見。如果我調用super並繪製背景,則會出現在兩者之上。

NSFormCell的實現不會調用-drawInteriorWithFrame:inView:也不會提供另一個覆蓋點。

我嘗試設置highlighted,並實施-highlightColorWithFrame:inView: - 同樣的問題。

雖然我想了解這一切如何工作,我也嘗試了NSForm的子類。唯一與圖形相關的方法是-drawRect:。從不調用這些方法:-drawCellAtIndex:-drawCellAtRow:column:,-drawCell:,-drawCellInside:

除了讓Apple解決這個問題外,我看到的唯一解決方案是嘗試使用NSForm的超類NSMatrix,或者只是使用標籤和文本字段。

相關問題