2009-02-06 23 views
22

Tengo un NSOutlineView vinculado a un NSTreeController (si eso hace la diferencia), y me gustaría expandir cada nodo en mi -awakeFromNib().NSOutlineView - Expandir automáticamente todos los nodos

También me gustaría seleccionar programáticamente el primer elemento secundario del primer nodo al mismo tiempo. Este tipo de cosas son simples con vistas de tabla, pero los contornos no están cooperando conmigo en absoluto.

Gracias,

Rich

Respuesta

54

me gustaría expandir todos los nodos en mi -awakeFromNib().

A partir de Mac OS X 10.5, [outlineView expandItem:nil expandChildren:YES].

En versiones anteriores de Mac OS X, necesitará iterar desde 0 hasta el número de filas, obtener el artículo para cada fila usando [outlineView itemAtRow:row] y almacenar esos elementos en una matriz, luego iterar la matriz y pasar cada elemento al método expandItem:expandChildren:. (No puede mezclar los dos bucles porque la expansión de un elemento y todos sus descendientes cambiarán los índices de fila de sus hermanos siguientes, por lo tanto, primero debe recopilar todos los elementos de nivel superior y, a continuación, expandirlos una vez que los tenga todos.)

También me gustaría seleccionar programáticamente el primer elemento secundario del primer nodo al mismo tiempo.

Inmediatamente después de lo anterior, será la fila 1.

Una vista de esquema es una especie de vista de la tabla, por lo que vamos a usar uno de los métodos de NSTableView: [outlineView selectRowIndexes:[NSIndexSet indexSetWithIndex:1] byExtendingSelection:NO].

+0

perfecto, gracias. ¿Por qué no funciona el paso nulo? Intenté ese mensaje con casi todos los objetos en los que podía pensar ... –

+1

Como explica la documentación de NSOutlineView, no es válido ya que el elemento le dice que expanda todos los elementos de la raíz. –

+1

También relacionado: No beba demasiado vino al codificar y no olvide conectar el tomacorriente a NSOutlineView como lo hice hoy. ;) –

-2

Si va a cargar desde una fuente de datos,

dispatch_async(dispatch_get_main_queue(), ^{ 
    [self.outlineView expandItem:root expandChildren:YES]; 
}); 
Cuestiones relacionadas