2012-08-25 59 views
5

将基于单元格的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]; 
    } 
} 

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

回答

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; 
    } 
} 
+3

'NSTabelCellView'因此,你已经提供一个属性'imageView'可以通过设置'cellView.imageView.objectValue = [item icon]'来设置图像。您不需要SourceView示例中的ImageAndTextCell类。 – Stephan

相关问题