NSTableView. Cómo anular el comportamiento de desplazamiento automático?
-
19-09-2019 - |
Pregunta
Tengo una NSTableView que muestra (a través de enlaces de) datos de un NSTreeController. La aplicación con frecuencia anexa / datos cambios a / de la matriz ligada.
El problema es que si el usuario ha seleccionado una fila en la tabla, pero se ha desplazado de manera que los datos seleccionados ya no es visible, cuando la aplicación actualiza la matriz que hace que la pantalla de desplazamiento automático para que la línea seleccionada es una vez más en la pantalla. Esto es bastante frustrante para los usuarios, sobre todo porque los nuevos datos pueden llegar en cualquier momento.
¿Hay alguna manera de desactivar esta función?
Solución
Es posible que tenga una subclase NSTableView
y anular -scrollRowToVisible:
, horquillado temporalmente la llamada a super
. Esto también puede requerir una Ivar BOOL personalizado en su subclase para realizar un seguimiento de si desea desplazarse.
Me gustaría empezar por establecer un punto de interrupción allí para ver en qué momento se activa el desplazamiento automático. Esto debería ayudar a encontrar los momentos adecuados para alternar el Ivar.
Otros consejos
¿Está utilizando un NSTreeController
con un NSOutlineView
o un NSArrayController
con un NSTableView
? El uso de un NSTreeController
con un NSTableView
no tiene mucho sentido para mí?
Si estás usando una NSTableView
probablemente debería estar usando un NSArrayController
para gestionar sus datos y de esta reordenación de las filas es una característica de la NSArrayController
. Intente apagar el Auto reorganizar el contenido opción en el controlador dentro del IB.
Cuando es activado, el controlador del conjunto de reordenará sus objetos en adición, eliminación y cambios a los objetos que puedan afectar el orden de clasificación (si existe) y causar ningún vistas de tabla o esquema vistas para recargar sus datos.
No sé de una característica similar para NSTreeController
principalmente porque no lo uso, ya que nunca ha funcionado bien para mí. Yo, por desgracia, recomiendo que sólo tiene que utilizar los métodos del origen de datos para el NSOutlineView
y suministrar sus datos a la antigua usanza. En mi experiencia, NSTreeController
sólo es adecuado para las tareas más triviales.