2009-05-26 15 views
16

Parece que he estado buscando durante mucho tiempo y no he encontrado una gran, fácil, respuesta a mi problema.NSTableView con celdas personalizadas

Estoy usando XCode con Cocoa/ObjC y estoy tratando de crear un NSTableView que cargue los valores de un NSDictionary/Array en diferentes secciones de una celda.

Por ejemplo, estoy tratando de obtener un NSImage, NSTextField y otros elementos en una celda personalizada (junto con una imagen de fondo). Sin embargo, no puedo encontrar una respuesta simple para crear esto ..

He estado codificando para el iPhone con UITableViews desde hace un tiempo y parece que no puedo encontrar una manera similar con NSTableViews.

¡Cualquier ayuda sería realmente genial!

Gracias

Dominic

+0

Aquí está mi [enfoque visual] (http://stackoverflow.com/questions/5884265/how-to-setup-a-nstableview-with-a-custom-cell-using-a-subview) (aún algunos problemas de representación) – JJD

Respuesta

26

NSTableView tiene -tableView:dataCellForTableColumn:row:. Simplemente cree su subclase NSCell en su delegado y devuélvala si necesita personalización para esa fila. Si solo está utilizando su celda personalizada para cada fila en la vista de tabla, también puede usar IB para establecer la clase de celda personalizada.

La vista de tabla copiará la celda según sea necesario, por lo que puede mantener la celda como una variable de instancia si fuera más eficiente. Los métodos de origen de datos o enlaces en la vista de tabla funcionan como lo harían normalmente, solo devolverá su diccionario completo en lugar de una única cadena o número. También podría pasar un objeto de modelo personalizado directamente a la vista de tabla, aunque tendrá que hacer que se pueda copiar, o anular setObjectValue: en su celda para envolverlo en un NSValue.

Si está subclasando NSCell que le está causando problemas, puede ser una experiencia de aprendizaje. Comience con -drawWithFrame:inView: para dibujar todos sus objetos personalizados, e ir desde allí ya que necesita más funcionalidad.

+1

¡Gracias por la información! Encontré muy poca documentación sobre NSCells. –

+3

Si está diseñando una celda personalizada que tiene variables de instancia, lea atentamente la documentación, ya que algunos métodos DEBEN implementarse como "copyWithZone:". –

+0

Así que tengo que implementar '-setObjectValue:' en mi subclase de NSCell personalizada y simplemente devolver el valor del objeto para la celda de la derecha en '-tableView: objectValueForTableColumn: row:'? – 11684

3

Una celda solo puede contener un valor de objeto a la vez. Cree un objeto modelo con la imagen y la cadena/cadena atribuida como propiedades, y llene la vista de tabla con eso.

Además, un campo de texto es una vista. Su modelo no debe saber nada de su presentación: ese es el trabajo de sus puntos de vista.

Cuestiones relacionadas