更改NSCell的背景而不更改NSTableColumn中的所有单元格

时间:2014-07-26 01:31:40

标签: nstableview nscell nstablecolumn

我正在尝试更改基于单元格的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];

1 个答案:

答案 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];
    }
}