NSOutlineView - la combinación de múltiples fuentes
-
08-10-2019 - |
Pregunta
En mi aplicación, tengo una NSOutlineView
que obtiene sus datos de una NSTreeController
-. Que a su vez se obtiene a partir del modelo de datos básicos
Lo que me gustaría hacer ahora es añadir títulos de grupo y tal vez algunas filas adicionales a la vista de esquema - obviamente cosas que debe existir fuera del modelo y ser parte de la vista. Pero, por mucho que me rasco la cabeza sobre esto, no puedo pensar en ninguna manera de hacer que la pantalla de vista de esquema estas cosas sin modificar el modelo subyacente, que es, obviamente, un gran no-no.
Su ayuda es muy apreciada. Siento que estoy perdiendo algo obvio aquí ...
Solución
Lo que se puede hacer aquí es escribir una subclase NSTreeController
personalizado. He aquí por qué este es el lugar perfecto para los cambios que desea hacer:
- No está en el modelo, como usted ha dicho.
- No tiene nada que ver con la vista -. Completamente transparente
- Básicamente lo que quiere es crear datos que se muestran a partir de datos guardados <-. Esto es tarea de un controlador
Por suerte, las clases Controlador de cacao son muy potentes y muy simple al mismo esto. Para usted que debería ser suficiente para anular el -arrangedObjects
. Reutilización La implementación por defecto, como lo hace un montón de cosas útiles, como la aplicación de predicados o clasificación. Así es como esto podría ser:
- (id)arrangedObjects {
id root = [super arrangedObjects];
// "root" is something like a NSTreeNode but not quite yet
NSTreeNode *newRoot = [NSTreeNode treeNodeWithRepresentedObject: nil];
[[newRoot mutableChildNodes] setArray: [root childNodes]];
// Do your customizations here
return newRoot;
}
El objeto devuelto es de la clase NSTreeNode
-. consulte la documentación sobre cómo hacer modificaciones