在NSTableView中着色一行

时间:2010-01-08 14:37:47

标签: objective-c cocoa

我要做的是在单击I按钮时在NSTableView中设置所选行的背景颜色。 我已经看过其他人使用tableView:willDisplayCell:forTableColumn:row:setBackgroundColor:的情况,但我不认为这会在我希望单击按钮时发生的情况下有效。

我知道我可以使用NSTableView的selectedRow方法找到所选行,并为setBackgroundColor:的单元格设置背景颜色,但我不知道怎么做是从NSInteger获取对于选定的行到NSCell来设置背景颜色。

3 个答案:

答案 0 :(得分:7)

NSTableView仅为每列使用NSCell的一个实例。绘制内容时,将为每一行更新单元格。这就是为什么没有方法来获取指定行的单元格 - 您必须修改tableView:willDisplayCell:forTableColumn:row:中的单元格。

您可以告诉表格视图使用reloadDataForRowIndexes:columnIndexes:仅更新一行。

答案 1 :(得分:6)

将背景颜色设置为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,否则这将无效!

答案 2 :(得分:5)

如果您只想更改整个选定行的颜色:

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

glhf