macos cocoa cocoa-bindings nsoutlineview

macos - ¿Ejemplo de cómo implementar una lista de fuentes basada en vistas(NSOutlineView) utilizando enlaces de cacao?



cocoa cocoa-bindings (2)

¿Alguien ha encontrado un ejemplo o una guía clara y concisa sobre cómo implementar una lista de fuentes utilizando el NSOutlineView basado en vistas introducido en Lion? He visto el proyecto de ejemplo de Apple, pero sin ningún sentido de dirección o explicación, me resulta difícil comprender el concepto de cómo funcionan exactamente.

Sé cómo usar la excelente PXSourceList como alternativa, pero me gustaría comenzar a usar listas de fuentes basadas en vistas, si es posible.



Lo etiquetó con la etiqueta de encuadernación de cacao, así que supongo que quiere decir "con encuadernaciones". Agité un ejemplo rápido. Comience desde una nueva plantilla de aplicación Cocoa no basada en documentos en Xcode. Llámalo como quieras. Primero agregué algo de código para hacer algunos datos falsos para enlazar. Así es como se ve mi encabezado de AppDelegate:

#import <Cocoa/Cocoa.h> @interface SOAppDelegate : NSObject <NSApplicationDelegate> @property (assign) IBOutlet NSWindow *window; @property (retain) id dataModel; @end

Y aquí está el aspecto de mi implementación de AppDelegate:

#import "SOAppDelegate.h" @implementation SOAppDelegate @synthesize window = _window; @synthesize dataModel = _dataModel; - (void)dealloc { [_dataModel release]; [super dealloc]; } - (void)applicationDidFinishLaunching:(NSNotification *)aNotification { // Insert code here to initialize your application // Make some fake data for our source list. NSMutableDictionary* item1 = [NSMutableDictionary dictionaryWithObjectsAndKeys: @"Item 1", @"itemName", [NSMutableArray array], @"children", nil]; NSMutableDictionary* item2 = [NSMutableDictionary dictionaryWithObjectsAndKeys: @"Item 2", @"itemName", [NSMutableArray array], @"children", nil]; NSMutableDictionary* item2_1 = [NSMutableDictionary dictionaryWithObjectsAndKeys: @"Item 2.1", @"itemName", [NSMutableArray array], @"children", nil]; NSMutableDictionary* item2_2 = [NSMutableDictionary dictionaryWithObjectsAndKeys: @"Item 2.2", @"itemName", [NSMutableArray array], @"children", nil]; NSMutableDictionary* item2_2_1 = [NSMutableDictionary dictionaryWithObjectsAndKeys: @"Item 2.2.1", @"itemName", [NSMutableArray array], @"children", nil]; NSMutableDictionary* item2_2_2 = [NSMutableDictionary dictionaryWithObjectsAndKeys: @"Item 2.2.2", @"itemName", [NSMutableArray array], @"children", nil]; NSMutableDictionary* item3 = [NSMutableDictionary dictionaryWithObjectsAndKeys: @"Item 3", @"itemName", [NSMutableArray array], @"children", nil]; [[item2_2 objectForKey: @"children"] addObject: item2_2_1]; [[item2_2 objectForKey: @"children"] addObject: item2_2_2]; [[item2 objectForKey: @"children"] addObject: item2_1]; [[item2 objectForKey: @"children"] addObject: item2_2]; NSMutableArray* dataModel = [NSMutableArray array]; [dataModel addObject: item1]; [dataModel addObject: item2]; [dataModel addObject: item3]; self.dataModel = dataModel; } @end

No hay un significado particular para la estructura de datos falsos que creé, solo quería mostrar algo con un par de subniveles, etc. Lo único que importa es que las rutas clave que especifique en los enlaces en Interface Builder se alinean con el claves en sus datos (datos falsos en este caso).

Luego seleccione el archivo MainMenu.xib . En el editor de IB, siga los siguientes pasos:

  1. Use la Biblioteca de objetos (Ctrl-Cmd-Opt-3) para agregar un NSTreeController a su .xib .
  2. Seleccione el NSTreeController y, mediante el Inspector de atributos (Cmd-Opt-4), configure Key Paths> Children to children (para este ejemplo; para sus datos, esto debe ser lo que devuelva la matriz de objetos secundarios).
  3. Con el NSTreeController aún seleccionado, use el inspector de enlaces (Cmd-Opt-7) para enlazar la matriz de contenido a la AppDelegate, con una ruta de clave modelo de dataModel
  4. Luego use la Biblioteca de objetos (Ctrl-Cmd-Opt-3) para agregar un NSOutlineView a su .xib .
  5. Organícelo a su gusto dentro de la ventana (por lo general, toda la altura de la ventana, a ras del lado izquierdo)
  6. Seleccione el NSOutlineView (tenga en cuenta que la primera vez que haga clic en él, probablemente haya seleccionado el NSScrollView que lo contiene. Haga clic en él una segunda vez y habrá profundizado en el propio NSOutlineView. Tenga en cuenta que esto es MUCHO más fácil si amplía el área a la izquierda del editor de IB donde están todos los objetos; esto le permite ver los objetos como un árbol, y navegar y seleccionarlos de esa manera.)
  7. Usando el inspector de atributos (Cmd-Opt-4) configure el NSOutlineView:
    • Modo de contenido : View Based
    • Columnas : 1
    • Resaltar : Source List
  8. Usando el inspector de enlaces (Cmd-Opt-7), vincule "Contenido" a "Controlador de árbol", Clave del controlador :ordenObjects (Aquí es donde el comportamiento de NSTableView / NSOutlineViews basado en vistas comienza a divergir de los basados ​​en NSCell)
  9. En la Lista de objetos (mencionada en # 6), expanda la jerarquía de vistas de NSOutlineView y seleccione Static Text - Table View Cell .
  10. Usando el inspector de enlaces (Cmd-Opt-7), vincule el valor a Table Cell View , ruta de la clave del modelo: objectValue.itemName (he usado itemName en los datos falsos, desearía usar la clave que corresponda al nombre de sus datos) artículos)

Salvar. Correr. Debería ver una lista de fuentes, y una vez que haya expandido los nodos con hijos, podría ver algo como esto:

Si está en el Programa de desarrolladores de Apple, debería poder acceder a los videos de la WWDC 2011 . Hay uno dedicado específicamente a trabajar con NSTableView basado en vistas (y NSOutlineView) e incluye una cobertura bastante completa de los enlaces.

¡Espero que ayude!