NSOutlineView 更改披露图像

Ami*_*k12 4 macos cocoa objective-c nsoutlineview nscell

我的大纲视图,我正在添加自定义单元格,要绘制自定义单元格,我指的是示例代码,存在于 Cocoa 文档中

http://www.martinkahr.com/2007/05/04/nscell-image-and-text-sample/

我想用我的自定义图像更改单元格的显示图像,我尝试过以下操作

- (void)outlineView:(NSOutlineView *)outlineView willDisplayCell:(id)cell forTableColumn:(NSTableColumn *)tableColumn item:(id)item 
    {
        if([item isKindOfClass:[NSValue class]])
        {
            MyData *pDt = (MyData *)[item pointerValue];
            if(pDt->isGroupElement())
            {
                [cell setImage:pGroupImage];
            }
        }
}
Run Code Online (Sandbox Code Playgroud)

但这也不起作用,有没有其他方法可以更改公开图像,还有我如何在 willDisplayCell 中找出项目是展开还是折叠,以便我可以相应地设置图像,

这只是改变披露形象的地方吗?

Sco*_*len 5

在我自己研究了这个问题并在这里尝试了一些答案之后,我发现提到的其他方法也可以工作,但需要您执行更多的手动干预以避免屏幕伪影和其他奇怪的行为。

我找到的最简单的解决方案如下,在大多数情况下应该可以工作。

该解决方案的另一个好处是系统可以自动处理很多其他情况,例如柱移动等,而无需您参与。

- (void)outlineView:(NSOutlineView *)outlineView willDisplayOutlineCell:(id)cell
     forTableColumn:(NSTableColumn *)tableColumn
               item:(id)item
{
    [cell setImage:[NSImage imageNamed: @"Navigation right 16x16 vWhite_tx"]];
    [cell setAlternateImage:[NSImage imageNamed: @"Navigation down 16x16 vWhite_tx"]];
}
Run Code Online (Sandbox Code Playgroud)

在您的情况下,您将使用类检测逻辑将其包装起来,并为您的情况适当设置单元格图像。