NSOutlineView + DataSource正确设置。如何添加ImageAndTextCell?

时间:2012-03-31 09:25:44

标签: objective-c cocoa datasource nsoutlineview

我已正确设置了NSOutlineView及其数据源,但效果很好。

它实际上是一个基本的文件浏览器,显示特定路径(文件夹,子文件夹等)的文件夹结构。子文件夹按需加载(当文件夹项目展开时,只有加载其内容,出于速度原因)。

我想知道的是我如何能够轻松地添加对ImageAndTextCell类已有的支持,以便我可以每个条目旁边的文件夹/文件图标......

感谢任何帮助。 (请不要指向我的文档;我已经研究了几乎所有文档;我需要的是一些已经完成它的人的建议,以便我只是添加到我现有的代码中;无需从头开始重写或完全改变逻辑......)

由于

这是*My Code *(我在格式化时遇到了麻烦......所以我将其发布在Snippet.MX


建议的内容和所有大纲查看项目的名称是否突然出现......

enter image description here

1 个答案:

答案 0 :(得分:1)

文档是你的朋友,但我知道有时候是如此巨大。

顺便说一句 您需要为大纲视图设置ImageAndTextCell,您可以在窗口控制器init或awakeFromNib方法上或在NSOutlineView子类上直接(如果需要)。

在我的项目中,我有一个NSOutlineView子类,如下所示

// myOutlineView subclass

- (void)awakeFromNib {
    self.imageCell = [[ImageAndTextCell alloc] init];
    [self.imageCell setEditable: NO];
    NSTableColumn* leftColumn = [[self tableColumns] objectAtIndex:0];
    [leftColumn setDataCell: self.imageCell];
}

然后你需要实现willDisplayCell委托方法,你可以在其中设置特定列的图像,如下所示(文件夹图标,文件txt图标,jpg图标)。

在下面显示的代码中,我从我的单例VDIconUtils中获取它,但你只需返回一个NSImage

- (void)outlineView:(NSOutlineView *)outlineView willDisplayCell:(id)cell forTableColumn:(NSTableColumn *)tableColumn item:(id)item {
    [cell setDrawsBackground:NO];
    if ([[tableColumn identifier] isEqualToString:@"mycellname"]) {
        [cell setImage:[[VDIconUtils sharedIconUtils] iconForFolderStatus:fs :16 :[outlineView isItemExpanded:item]]];
    }

}