1

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

1 回答 1

4

基于单元格的表格每列使用一个单元格。这就像一个橡皮图章。它沿着可见的行向下,为该行设置单元格,告诉它在该行+列的框架矩形中绘制,然后转到下一行。

您应该为您的表设置一个委托并让它实现-tableView:willDisplayCell:forTableColumn:row:。在该方法中,根据行设置单元格的属性。您不能只为您认为“特殊”的任何行设置一个属性。如果您更改某些行的属性,您也需要将其更改为您认为所有其他行的“正常”属性。

因此,您的方法可能如下所示:

- (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];
    }
}
于 2014-07-26T02:01:08.490 回答