1

选择单元格时,我正在尝试更改 NSTextFieldCell 的背景颜色。

这是代码:

- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView {

    [super drawWithFrame:cellFrame inView:controlView];

    if([self isHighlighted]) {
        [self setBackgroundColor:[NSColor whiteColor]]; 
    }   
}

但所选行始终为蓝色。我错过了什么?

注意:这不是 iOS 应用程序。

提前谢谢你。

4

2 回答 2

5

这并不像我以前想的那样容易:NStableview 那里有一些问题。如果你使用类似的东西:

[destinationsListForSaleTableView setSelectionHighlightStyle:NSTableViewSelectionHighlightStyleNone];

你所要做的

 - (void)tableView:(NSTableView *)aTableView willDisplayCell:(id)aCell forTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex
{
 if ([[aTableView selectedRowIndexes] containsIndex:rowIndex]) {
    [aCell setBackgroundColor: [NSColor colorWithDeviceRed:0.29 green:0.27 blue:0.42 alpha:1]];

} else [aCell setBackgroundColor: [NSColor colorWithDeviceRed:0.52 green:0.54 blue:0.70 alpha:1]];
[aCell setDrawsBackground:YES];

}  

如果您的单元格不是自定义的,这就足够了。如果你改变高度和内部,它必须更复杂:

保留选择样式表供您选择。在细胞子类中:

-(NSColor *)highlightColorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView {
return nil;
//[NSColor colorWithDeviceRed:0.29 green:0.27 blue:0.42 alpha:1];
}

 - (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView
{
if ([self isHighlighted]) {
    [[NSColor colorWithDeviceRed:0.29 green:0.27 blue:0.42 alpha:1] set];
    cellFrame.origin.x -= 1;
    cellFrame.origin.y -= 1;
    cellFrame.size.height += 2;
    cellFrame.size.width += 3;

    NSRectFill(cellFrame);

}
[super drawWithFrame:cellFrame inView:controlView];
}

你问我为什么要改变填充的大小?Bcs 当你使用背景时,苹果会留下一个小盒子,它会有不同的颜色。

于 2011-05-08T09:29:36.803 回答
-1

不要那样做。相反,当您在 -tableView:cellForRowAtIndexPath: 中创建单元格时,将单元格的“selectedBackgroundView”属性设置为当单元格被选中时将成为背景的视图。这可以只是一个带有背景颜色的普通旧 UIView。我在 UIView 上创建了一个类别,它有一个名为 +backgroundViewForTableCell: 的方法,它正是这样做的……实例化一个视图并将其背景颜色设置为我想要的颜色。我在创建单元格时这样使用它:

cell.selectedBackgroundView = [UIView backgroundViewForTableCell:cell];

点击单元格时您可能想要做的另一件事是设置单元格中任何文本的颜色。例如,如果您的背景颜色相对较暗,您可能希望将文本颜色从黑色更改为白色。

于 2011-03-05T17:31:40.380 回答