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



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

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

使用这些代码设置图像

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

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

我怎样才能使它看起来好呢?

这个方法应该可以工作。这是从记忆,所以没有保证,但一个快速的模型似乎给你正在寻找的结果:

// 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];

我认为你必须使用按钮类型为"瞬间改变"。可以从按钮属性中修改

相关内容

  • 没有找到相关文章

最新更新