Ho una semplice app che elenca alcuni modelli in un NSTableView
.Aggiunta programmatica di colonne (con collegamenti) a un NSTableView basato su visualizzazione?
La tabella è una tabella basata su viste completamente standard con un paio di colonne e viene popolata tramite un binding NSArrayController
. Tutto ciò è impostato in Interface Builder e funziona come previsto.
Ora, vorrei aggiungere altre colonne a livello di codice e tenere queste nuove colonne associate a vari keypath nei modelli. E lì, sono bloccato.
Per semplicità, assumere questa configurazione:
- Gli oggetti modello sono oggetti semplici con solo una singola proprietà NSString:
name
- L'AppDelegate ha una proprietà NSArray (
models
) che contiene un numero di modello le istanze. - Il NSArrayController's
content
è associato all'arraymodels
del delegato dell'applicazione. - Il numero
content
di NSTableView è associato aarrangedObjects
del controller di array. - prima colonna della tabella viene vincolata (in IB) per visualizzare la proprietà
name
, cioè colonna → cella di tabella vista → testo statico vista tabella cella → valore è destinato a della visualizzazione cella objectValue.name
Questo è, per quanto ne so, semplice e dal libro, e funziona come un fascino.
Ma ... come aggiungere più colonne, quindi?
Per aggiungere una colonna programatically (per mantenere le cose semplici, diciamo solo che questa nuova colonna deve anche solo visualizzare la proprietà name
, proprio come la colonna che è già lì), immagino che avrei fatto qualcosa di simile in il delegato applicazione:
NSTableColumn* newColumn = [[NSTableColumn alloc] initWithIdentifier:@"newColumn"];
// do binding magic somehow
// [[newColumn dataCell] bind:NSValueBinding toObject:??? withKeyPath:??? options:nil];
[self.table addColumn:newColumn]; // the table's connected with an IBOutlet
ho provato tante combinazioni di legame da/alla cella di dati, la tabella, la colonna, il controller di array, la matrice stessa, così come tutti i tipi di keypaths, ma niente funziona. La nuova colonna è stata aggiunta correttamente, ma non è mai stata compilata.
Immagino che l'istanza di base di NSTableColumn che creo sia basata su celle, non basata sulla vista, e ciò sta causando problemi. Tuttavia, non ho idea di come procedere da qui, e i documenti non parlano mai di colonne vincolanti che sono state aggiunte programmaticamente.
In questo caso, tutto ciò che voglio è una semplice colonna di testo, legata al modello, esattamente come quella che posso facilmente configurare IB.
Potrei fare tutto questo implementando un NSTableViewDataSource
e "manualmente" alimentando la tabella, ma ho già impostato tutto il resto con i binding.
Qualsiasi aiuto sarebbe molto apprezzato.
Siamo spiacenti, non funziona; provato. Il binding della colonna funziona solo per le tabelle basate su celle. Non tabelle basate su viste. – Flambino