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í ...

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top