2011-08-17 6 views
5

Actualmente estoy tratando de usar un nuevo NSOutlineView basado en vista en mi aplicación Cocoa. Como no estoy usando enlaces, así que implementé todos los métodos necesarios de delegado y fuente de datos en mi controlador.Problemas de fuente de celda de encabezado NSOutlineView basados ​​en vista

En constructor de interfaces He añadido un NSOutlineView con un resaltado establecido en SourceList y el modo de contenido se establece en base Ver. Por lo tanto, había dos vistas de células tabla por defecto proporcionados (una celda de cabecera con HeaderCell conjunto como identificador y una celda de datos con DataCell conjunto como identificador)

Esto es lo que parece en constructor de interfaces, vistas de células cabecera mostrar correctamente un campo de texto de color azul grisáceo mientras que las vistas de datos celulares tienen una vista de la imagen y un campo de texto con la configuración de colores y fuentes correctas

para proporcionar los puntos de vista, yo uso el siguiente código, para devolver un DataCell- ver o una vista de celda de encabezado y establecer el campo de texto de la celda en consecuencia, basado en el identificador correspondiente establecido en el constructor de interfaz.

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


    NSTableCellView *result = nil; 

    if ([item isKindOfClass:[NSMutableDictionary class]]) { 
     result = [outlineView makeViewWithIdentifier:@"HeaderCell" owner:self]; 

     id parentObject = [outlineView parentForItem:item] ? [outlineView parentForItem:item] : groupedRoster; 
     [[result textField] setStringValue:[[parentObject allKeys] objectAtIndex:0]]; 


    } else { 
     result = [outlineView makeViewWithIdentifier:@"DataCell" owner:self]; 

     [item nickname] ? [[result textField] setStringValue:[item nickname]] : [[result textField] setStringValue:[[item jid] bare]]; 
    } 
    return result; 
} 

Ejecutando todo lo que parece ser el siguiente.

¿Alguien podría darme pistas sobre por qué la celda del encabezado no está en negrita, ni está correctamente coloreada, cuando se selecciona?

Respuesta

11

Debe implementar el método -outlineView: isGroupItem: delegate y devolver YES para sus filas de encabezado. Eso estandarizará la fuente y reemplazará el triángulo de revelación a la izquierda con un botón Mostrar/Ocultar a la derecha. Aún necesitará hacer mayúsculas manualmente en su cadena para obtener el efecto completo.

No estoy seguro si el método delegado de fila de grupo anterior hace que el estilo de selección se vea bien o no. Sin embargo, normalmente no desea que las filas de encabezado se puedan seleccionar en absoluto en las listas de origen, lo cual se devuelve NO para los elementos de encabezado del método -outlineView: shouldSelectItem: delegate.

+1

bien, gracias, esto era exactamente lo que estaba buscando. En caso de que alguien más encuentre el problema, use setFloatsGroupRows: NO para evitar que el primer elemento del grupo * salte * hacia arriba y hacia abajo al expandir y colapsar según [esta publicación] (http: // stackoverflow.com/questions/6814620/strange-behavior-using-view-based-nsoutline-sourcelist) – BinaryBucks

+0

Mientras estoy en ello ahora y todo se muestra correctamente, el código anterior funciona realmente no funciona con fluidez al expandir/colapsar un grupo como este es el caso, por ejemplo, Descubridor. Siempre hay un leve pero notable tartamudeo en la animación y una carga de CPU bastante pesada, como si la vista se hubiera asignado recientemente. Si solo uso makeViewWithIdentifer con un único identificador, de modo que cada celda sea una celda de encabezado (o una celda de datos, que no tenga colchón), todo funciona con fluidez. ¿Alguna pista de por qué? – BinaryBucks

+0

Sí, toda la propiedad floatsGroupRows se acaba de romper para las vistas de esquema. No he visto el problema de rendimiento que describes. ¿Tal vez una regresión de Core Animation desde una superview respaldada por capas? No sé. –

2

He creado un pequeño proyecto de ejemplo que incluye una lista fuente y también usa el método -outlineView:isGroupItem: como lo sugirió @ boaz-stuller.

  • mostrar una lista de artículos
  • Editar los elementos en forma de detalle maestro
  • retirar y añadir artículos
  • El uso de fijaciones

Salida besi/mac-quickies en github. La mayoría del material se realiza ya sea en IB o se pueden encontrar en las AppDelegate

screenshot

Cuestiones relacionadas