3

我有一个大问题,无法解决。

我有一个NSOutlineView包含一个从那里NSButtonCell绑定到arrayController它的内容,它正在设置它Title,并且基于某个值,通过代码在单元格背景中设置了一个图像。

使用这些代码设置图像

[cell setImage:[NSImage imageNamed:@"sbWarn.png"]];
[cell setImagePosition:NSImageOverlaps];
[cell setBackgroundColor:[NSColor clearColor]];

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

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

4

2 回答 2

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];
于 2013-04-15T20:39:30.560 回答
0

我认为您必须将按钮类型用作“瞬时更改”。您可以从按钮属性中更改它。

于 2013-07-19T12:54:19.793 回答