我正在尝试更改基于单元格的NSTableView
中特定单元格的背景。但是,当我尝试更改一个单元格的背景颜色时,它会影响整个列。有没有办法分离单元格和列之间必须存在的任何绑定?
这是我正在使用的代码(用评论解释我认为发生了什么):
// This allows me to change the background of the cell.
[[[[_tableController1 registerTableView] tableColumnWithIdentifier:@"offset"] dataCellForRow:table1idx] setDrawsBackground:YES];
// This gets the cell within the given table column and row.
[[[[_tableController1 registerTableView] tableColumnWithIdentifier:@"offset"] dataCellForRow:table1idx] setBackgroundColor:[NSColor redColor]];
// This reloads the table so my changes can be visible.
[[_tableController1 registerTableView] reloadData];
答案 0 :(得分:4)
基于单元格的表每列使用一个单元格。它就像各种各样的橡皮图章。它沿着可见行向下,为该行设置单元格,告诉它在该行中绘制直线,然后转到下一行。
您应该为表设置一个委托,并让它实现-tableView:willDisplayCell:forTableColumn:row:
。在该方法中,根据行适当设置单元格的属性。您不能为您考虑的任何行设置属性" special"。如果您更改了某些行的属性,则需要将其更改为您认为的任何行;" normal"对于所有其他行也是如此。
因此,您的方法可能如下所示:
- (void)tableView:(NSTableView *)aTableView willDisplayCell:(id)aCell forTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex
{
if ([[atTableColumn identifier] isEqualToString:@"offset"])
{
if (rowShouldHaveRedBackground)
{
[aCell setDrawsBackground:YES];
[aCell setBackgroundColor:[NSColor redColor]];
}
else
[aCell setDrawsBackground:NO];
}
}