cocoa - Comportamiento extraño usando NSOutline basado en la vista(Sourcelist)
nsoutlineview (4)
En caso de que no sea obvio para nadie:
"Flechas de grupo flotantes" en Interface Builder:
Puede establecer "Filas de grupo flotantes" directamente en Interface Builder.
seleccione su lista de fuentes en el esquema del documento de Interface Builder.
muestre el inspector de atributos y encontrará la casilla de verificación "Filas de grupo flotantes". Desmarque, y sus desagradables encabezados de grupos de saltos se comportan de repente :)
En Swift:
Alternativamente, si estás en Swift, puedes hacer algo como:
@IBOutlet weak var sourceList: NSOutlineView!
sourceList.floatsGroupRows = false
Tengo una (nueva en Lion) NSOutlineView basada en vistas como Sidebar SourceList en mi aplicación usando CoreData + NSTreeController + Bindings + NSOutlineView y un Objeto como NSOutlineViewDelegate.
Yo uso estos métodos de delegado en el delegado de la vista general:
- (BOOL) outlineView: (NSOutlineView *) outlineView isGroupItem: (id) item En mi caso, un item es un grupo cuando la relación principal (Core Data) es nula.
- (NSView *) outlineView: (NSOutlineView *) outlineView viewForTableColumn: (NSTableColumn *) tableColumn item: (id) item Para devolver la vista de encabezado (grupo) o la vista de panel de datos (icono + texto).
Y configuro el estilo de tamaño de la vista de esquema (en Interface Builder en XCode) como "Valor predeterminado del sistema de barra lateral" para que la vista de celda cambie su tamaño cuando el usuario lo cambie en las preferencias del sistema.
Funciona bien ... pero hay algunos problemas:
La primera vista de celda es una celda de grupo (celda de encabezado) y cuando se expande y contrae el campo de texto para esta vista de celda se mueve hacia arriba o hacia abajo. Solo pasa con el primero.
El campo de texto en las celdas del encabezado cambia su tamaño (cuando cambia el tamaño en las preferencias del sistema), pero me gustaría que el tamaño de las celdas del encabezado permanezca fijo como (Lion) Finder, Mail ... hace.
El valor de cadena del campo de texto en las celdas del encabezado no aparece en mayúsculas.
Las imágenes que utilizo como icono en la vista de imagen de las celdas de datos aparecen transparentes (con un valor alfa de 0.5 o algo así).
¿Alguna ayuda? Gracias por adelantado
Resuelto:
Para el movimiento cuando la primera vista de celda, expandir / contraer, use el método setFloatsGroupRows: NO con la vista general (¡Gracias Anton!)
Si desea un tamaño fijo para la fuente de las celdas de grupo (incluso si el usuario lo modifica en las preferencias del sistema), desvincule en IB la celda de encabezado con su Vista de celda de tabla.
Usando un valueTransformer (que transforma una cadena en mayúsculas) con la celda del encabezado, la cadena aparecerá en mayúsculas. También puede hacer esto con el método de fuente de datos nsoutlineview - outlineView: objectValueForTableColumn: byItem: ...
Y finalmente el icono es semitransparente porque no está habilitado. Desmarque "Conjuntos condicionales habilitados" en la ruta del valor o valor (según la que use) en los enlaces de celdas de la imagen
La configuración de setFloatsGroupRows: NO para la vista de esquema debe resolver el problema con el primer elemento del grupo moviéndose hacia arriba y hacia abajo cuando se está expandiendo / contrayendo.
Me preguntaba cómo lograron la lista de fuentes que está visible en la captura de pantalla.
He creado un pequeño proyecto de muestra, que hace lo mismo e incluye los comentarios de @ anton-ivanov:
- Mostrar una lista de artículos
- Editar los elementos en una forma de detalle maestro
- Quitar y agregar artículos
- Uso de encuadernaciones
Echa un vistazo a besi/mac-quickies en github. La mayoría de las cosas se realizan en IB o se pueden encontrar en el AppDelegate
También puede echar un vistazo a la respuesta de esta pregunta: NSOulineView header cell cell (Fuente de celda del encabezado de NSOulineView) El estilo automático de selección y selección de baile funcionó para mí.