Pregunta

En primer lugar pido disculpas por la longitud pero quiero asegurar que la información llegue suficientemente lejos. Tengo un problema interesante que en realidad no debería ser difícil. Sé que si usted quiere tener el rollo de NSOutlineView y quiere mostrar una fila específica sólo tiene que utilizar este patrón:

NSInteger row = [self.myOutlineView rowForItem:myItem];
[self.myOutlineView scrollRowToVisible:row];

No estoy usando un NSTreeController en favor del uso de la delegación.

Estoy usando una clase adapter para actuar como mis datos. El adaptador se ajusta un número de diferentes tipos. Es una estructura simple:

[hijos adaptador] ----- * [padre adaptador]

Así que el adaptador se encarga de tratar con cada niño contarán, puede agregar, puede eliminar, se puede expandir, etc., y también actúa como un objeto de transporte de datos.

Así que con eso todo fuera del camino aquí es el quid de la cuestión. Al agregar un nuevo elemento a la NSOutlineView que empezar por añadir un adaptador nuevo niño al adaptador que está seleccionado en la vista de esquema. Entonces vuelvo a cargar el elemento con los niños usando:

[self.myOutlineView reloadItem:selectedAdapter reloadChildren:YES];

I a continuación, mostrar la vista de este objeto y el intento de sincronizar la NSOutlineView por lo que la fila seleccionada se refiere a la vista recién visualizada. Así que de una manera sencilla los pasos son:

  1. Inicialmente cargar el NSOutlineView con los datos que utilizan el protocolo NSOutlineDataSource
  2. El usuario selecciona un elemento (adaptador) que se pueden agregar elementos secundarios
  3. El usuario hace clic en "Añadir" botón
  4. Se crea un nuevo objeto representado vacío
  5. El nuevo objeto representado se envuelve en un adaptador
  6. Se añade el adaptador de nueva creación a los hijos del adaptador seleccionado
  7. Un nuevo punto de vista se ha creado usando el nuevo objeto representado y se visualiza
  8. El (padre) nodo seleccionado y sus hijos se vuelven a cargar en el NSOutlineView
  9. La fila recién creado en la NSOutlineView se desplaza a la vista que sincroniza la vista y la selección de la NSOutlineView

Así que aquí está el problema. El NSOutlineView no encontrará el elemento recién añadido si se utiliza el método rowForItem. Sin embargo, después vuelvo a cargar puedo expandir el nodo principal y seleccione el elemento recién añadido y todo funciona bien. En un intento de solucionar el problema que he ampliado mediante programación el nodo padre (exponiendo el nuevo elemento) y luego tratar de desplazamiento para el elemento nuevo y todavía no puede encontrar la fila. Los rendimientos rowForItem -1.

¿Me he perdido algo cuando se añade un nuevo elemento que no estoy actualizando algo en el NSOutlineView? He intentado muchas cosas diferentes sin éxito y cualquier ayuda será apreciado considerablemente.

Gracias de antemano, Rob

¿Fue útil?

Solución

solucionado mi problema ... por fin.

Desde que estaba añadiendo mi primer hijo a ese nodo y que estaba cambiando de no ampliable a ampliable que necesitaba ser ampliado en primer lugar, a continuación, desplazarse a la vista, a continuación, seleccionar el elemento. No más problemas.

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