2009-05-26 19 views
16

sembra che stia cercando da molto tempo e non ho trovato una risposta facile, facile, al mio problema.NSTableView con celle personalizzate

Sto utilizzando XCode con Cocoa/ObjC e sto cercando di creare un NSTableView che carichi i valori da un NSDictionary/Array in diverse sezioni di una cella.

Ad esempio, sto cercando di ottenere NSImage, NSTextField e altri elementi in una cella personalizzata (insieme a un'immagine di sfondo). Tuttavia, non riesco a trovare una risposta semplice a come creare questo ..

Ho codificato per iPhone con UITableViews per un po 'di tempo e non riesco a trovare un modo simile con NSTableViews.

Qualsiasi aiuto sarebbe davvero eccezionale!

Grazie

Dominic

+0

Ecco il mio [approccio visivo] (http://stackoverflow.com/questions/5884265/how-to-setup-a-nstableview-with-a-custom-cell-using-a-subview) (alcuni ancora problemi di rendering) – JJD

risposta

26

NSTableView ha -tableView:dataCellForTableColumn:row:. È sufficiente creare la sottoclasse NSCell nel proprio delegato e restituirla se è necessaria la personalizzazione per quella riga. Se stai usando la tua cella personalizzata per ogni riga nella vista tabella, puoi anche usare IB per impostare la classe cella personalizzata.

La vista tabella copierà la cella in base alle esigenze, in modo da poter mantenere la cella come variabile di istanza se sarebbe più efficiente. I metodi di origine dati o le associazioni sulla vista tabella funzionano come farebbero normalmente, solo tu restituirai il tuo dizionario popolato invece di una singola stringa o numero. È anche possibile passare un oggetto del modello personalizzato direttamente a tableview, anche se sarà necessario renderlo eseguibile o sostituire la cella setObjectValue: nella cella per avvolgerla in un valore NSValue.

Se la sottoclasse di NSCell ti sta dando problemi, può essere un po 'un'esperienza di apprendimento. Inizia con -drawWithFrame:inView: per disegnare tutti gli oggetti personalizzati e vai da lì in quanto hai bisogno di più funzionalità.

+1

Grazie per le informazioni! Ho trovato pochissima documentazione riguardante NSCell. –

+3

Se si sta progettando una cella personalizzata con variabili di istanza, leggere attentamente la documentazione, poiché alcuni metodi DEVONO essere implementati come "copyWithZone:". –

+0

Quindi devo implementare '-setObjectValue:' nella mia sottoclasse NSCell personalizzata e restituisco solo il valore dell'oggetto per la cella di destra in '-tableView: objectValueForTableColumn: row:'? – 11684

3

Una cella può contenere solo un valore di oggetto alla volta. Creare un oggetto modello con l'immagine e stringa/stringa attribuita come proprietà e compilare la vista tabella con quello.

Inoltre, un campo di testo è una vista. Il tuo modello non dovrebbe sapere nulla della sua presentazione: questo è il lavoro dei tuoi punti di vista.

Problemi correlati