2012-08-25 16 views
5

Después de cambiar NSOutlineView basado en la celda a basado en la vista, no muestra los iconos y títulos del árbol del sistema de archivos. Aquí mi código:"Lista de fuentes" basada en la vista NSOutlineView no muestra los iconos y títulos de los elementos

- (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]; 
    } 
} 

Y tengo una pregunta más. Cómo colocar los elementos enumerados (matriz del elemento del sistema de archivos) en la celda "DataCell" y "HeaderCell" declarar como carpeta principal (grupo) y asignarle un título (por ejemplo, @ "Carpeta raíz") y la ruta de acceso la clase. Porque, ahora el método anterior basado en la vista, muestra el elemento enumerado solo en "HeaderCell" o "DataCell" y cuando intento asignarle un valor a "HeaderCell", la aplicación falla. ¿Me puede ayudar con esto?

Respuesta

4

Para visualizar los títulos y los iconos de artículos, que necesita sólo para cambiar este método

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

de la siguiente manera:

- (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' proporcionan ya una propiedad' imageView' por lo tanto, puede establecer la imagen simplemente configurando 'cellView.imageView.objectValue = [item icon]'. No necesita la clase ImageAndTextCell del ejemplo de SourceView. – Stephan

Cuestiones relacionadas