2010-01-08 66 views
5

我正在做的是在單擊I按鈕時,在NSTableView中設置所選行的背景顏色。 我見過其他案例,其中人們使用tableView:willDisplayCell:forTableColumn:row:setBackgroundColor:,但我不認爲這會在我點擊某個按鈕時希望它發生的情況下工作。在NSTableView中着色行

我知道我可以找到NSTableView的的selectedRow方法選定行,並與setBackgroundColor:設置背景色的單元格,但我不知道該怎麼做的是從一個NSInteger的獲得對於選擇的行到的NSCell設置背景顏色。

回答

7

NSTableView對於每列只使用NSCell的一個實例。繪製內容時,單元格會針對每一行進行更新。這就是爲什麼沒有辦法獲得指定行的單元格 - 您必須修改tableView:willDisplayCell:forTableColumn:row:中的單元格。

您可以使用reloadDataForRowIndexes:columnIndexes:來告訴表視圖更新只有一行。

+0

我只是嘗試這樣做http://grab.by/1CoC但它的顏色每一行灰色不只是我重新加載的那個。 – Joshua 2010-01-08 16:23:34

+1

1.不要使用int。使用'NSInteger'。試着做尼古拉所說的。 (請注意,它需要Snow Leopard。)3.使您的'tableView:willDisplayCell:forTableColumn:row:'方法檢查該行是否被選中以及用戶是否單擊了該按鈕。 – 2010-01-08 18:56:54

+0

1.好的。 2&3.我不能完全按照他的說法做,因爲我有一個NSOutlineView,或者我可以這樣做,因爲NSOutlineView繼承自NSTableView? – Joshua 2010-01-09 06:43:18

5

要使用此方法設置背景顏色NSTableview

- (void)tableView:(NSTableView *)tableView willDisplayCell:(id)cell1 forTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row 
{ 
     if(row==1) 
     [cell1 setBackgroundColor:[NSColor redColor]]; 
     else if(row==2||row==3) 
     [cell1 setBackgroundColor:[NSColor greenColor]]; 
     else 
     [cell1 setBackgroundColor:[NSColor clearColor]]; 
} 

我們可以給每一行給予不同的顏色.. 確保drawsBackground是在NSTextFieldCell啓用否則將沒有任何效果!

+0

'drawsBackground'上的好指針。 – DTs 2014-06-30 17:49:28

5

如果你只是想改變整個選定行的顏色:

NSInteger selectedRow = [self.nsTableView selectedRow]; 
NSTableRowView* rowView = [self.nsTableView rowViewAtRow:selectedRow makeIfNecessary:NO]; 
[rowView setBackgroundColor:[NSColor blackColor]]; 

glhf

+2

僅限於使用基於視圖的表格。如果我們正在討論基於單元格的表格,就像我想的那樣,那麼rowViewAtRow:...方法將始終返回nil。 – dgatwood 2014-04-17 20:26:55