基于视图的"源列表"NSOutlineView不显示项目的图标和标题

jaz*_*man 5 cocoa objective-c nsoutlineview

将NSOutlineView基于单元格更改为基于视图后,它不会显示文件系统树的图标和标题.这是我的代码:

- (void)outlineView:(NSOutlineView *)outlineView willDisplayCell:(id)cell forTableColumn:(NSTableColumn *)tableColumn item:(id)item {
    if ([[tableColumn identifier] isEqualToString:@"name"])
        return [(ImageAndTextCell *)cell setTextFieldImage:[item icon]];
}

- (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item {
    return [((ConstructorFSEntity *)item) title];
}

- (NSView *)outlineView:(NSOutlineView *)outlineView viewForTableColumn:(NSTableColumn *)tableColumn item:(id)item {
    if ([item isKindOfClass:[FSEntity class]]) {
        return [outlineView makeViewWithIdentifier:@"HeaderCell" owner:self];
    } else {
        return [outlineView makeViewWithIdentifier:@"DataCell" owner:self];
    }
}
Run Code Online (Sandbox Code Playgroud)

我还有一个问题.如何将枚举项(文件系统项的数组)放入单元格"DataCell",并将"HeaderCell"声明为父文件夹(组)并为其分配标题(例如,@"根文件夹")和路径班级.因为,现在以前的基于视图的方法,仅在"HeaderCell"或"DataCell"中显示枚举项目,当我尝试为"HeaderCell"分配一些值时,应用程序崩溃.你能帮帮我吗?

Ian*_*son 4

要显示项目的标题和图标,只需更改此方法

- (NSView *)outlineView:(NSOutlineView *)outlineView viewForTableColumn:(NSTableColumn *)tableColumn item:(id)item

如下:

- (NSView *)outlineView:(NSOutlineView *)outlineView viewForTableColumn:(NSTableColumn *)tableColumn item:(id)item {
    if (![item isKindOfClass:[FSEntity class]]) {
        return [outlineView makeViewWithIdentifier:@"HeaderCell" owner:self];
    } else {
        NSTableCellView *cellView = [outlineView makeViewWithIdentifier:@"DataCell" owner:self];
        [(ImageAndTextCell *)cellView.textField.cell setTextFieldImage:[item icon]];
        cellView.textField.stringValue = [((FSEntity *)item) title];
        return cellView;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • `NSTabelCellView` 已经提供了一个属性 `imageView`,因此您只需设置 `cellView.imageView.objectValue = [item icon]` 即可设置图像。您不需要 SourceView 示例中的 ImageAndTextCell 类。 (3认同)