如何在选择NSOutlineView行时设置背景颜色

时间:2013-04-15 09:49:39

标签: objective-c macos cocoa nsoutlineview nsbuttoncell

我遇到了一个大问题而无法解决问题。

我有一个NSOutlineView,其中包含NSButtonCellarrayControllerTitle开始设置[cell setImage:[NSImage imageNamed:@"sbWarn.png"]]; [cell setImagePosition:NSImageOverlaps]; [cell setBackgroundColor:[NSColor clearColor]]; 并根据某个值设置一个Image细胞背景代码。

使用这些代码设置图像

{{1}}

问题是当我选择一行时,所选行显示黑色背景。我尝试了各种可能的方法,比如将background设置为clearColor等。

我怎样才能让它看起来不错。

2 个答案:

答案 0 :(得分:1)

这种方法应该有效。这是来自记忆,所以没有保证,但快速的模型似乎给你正在寻找的结果:

// Outline view delegate

-(void)outlineView:(NSOutlineView *)outlineView willDisplayCell:(id)cell forTableColumn:(NSTableColumn *)tableColumn item:(id)item {

    NSUInteger rowNo = [outlineView rowForItem:item];

    NSColor *backgroundColor;
    if ( [[outlineView selectedRowIndexes] containsIndex:rowNo] ) {
        backgroundColor = // Highlighted color;
    }
    else {
        backgroundColor = // Normal background color;
    }

    [cell setBackgroundColor: backgroundColor];
}

在您的情况下,您当然只会使用按钮单元格在列上应用单元格背景颜色。

这是在outlineView:dataCellForTableColumn:item:中创建的按钮单元格。

NSButtonCell *cell = [[NSButtonCell alloc] init];

[cell setBezelStyle:NSRegularSquareBezelStyle];
[cell setButtonType:NSToggleButton];
[cell setBordered:NO];
[cell setTitle:@""];
[cell setImage:[NSImage imageNamed:@"green.png"]];
[cell setAlternateImage:[NSImage imageNamed:@"red.png"]];
[cell setImagePosition:NSImageOverlaps];

答案 1 :(得分:0)

我认为你必须使用按钮类型作为“瞬间变化”。您可以从按钮属性更改它。