2010-05-07 15 views
5

Ho un NSTableView che sta visualizzando una matrice di oggetti che ho. Per ciascuno di questi oggetti (righe) vorrei cambiare il colore del testo visualizzato a seconda dei risultati di una funzione che corro su ogni oggetto;Coloring NSTableView Testo per riga

Quindi, ad esempio, tutti gli oggetti nella tabella che esistono in un altro elenco (o qualche altro requisito) Voglio visualizzarli in testo verde e gli oggetti che non esistono sono visualizzati in rosso.

Come faccio a fare questo?

risposta

6

Supponendo di avere NSTextFieldCell nella tabella (per altre celle, l'impostazione del colore del testo può variare), è possibile ottenere ciò implementando un metodo delegato di NSTableView.

Innanzitutto, è necessario definire un delegato per lo NSTableView, in Interface Builder o nel codice. Ad esempio, questo può essere il controller dell'applicazione.

Poi, basta implementare il seguente metodo:

- (void)tableView:(NSTableView *)aTableView willDisplayCell:(id)aCell forTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex { 
    NSTextFieldCell *cell = aCell; 
    if (...) { 
     [cell setTextColor:[NSColor greenColor]]; 
    } else if (...) { 
     [cell setTextColor:[NSColor redColor]]; 
    } else { 
     [cell setTextColor:[NSColor blackColor]]; 
    } 
} 

Ogni volta che il NSTableView sarà disegnare una cella, si ha la possibilità di modificarlo prima di venire disegnato.

Controlla la pagina di documentazione NSTableViewDelegate per ulteriori dettagli.

+0

Nella tabella che sto usando ho solo NSTextFieldCell, ma cosa succede se ho avuto diverso questo metodo non funziona come è? – Tristan

+0

Bene, non tutte le celle hanno metodi "textColor" e "setTextColor:", come NSButtonCell. È solo una cosa da controllare. –

Problemi correlati