2010-05-07 11 views
5

J'ai un NSTableView qui affiche un tableau d'objets que j'ai. Pour chacun de ces objets (lignes) je voudrais changer la couleur du texte affiché en fonction des résultats d'une fonction que je cours sur chaque objet; Donc, par exemple, tous les objets de la table qui existent dans une autre liste (ou une autre exigence), je veux les afficher en vert et les objets qui n'existent pas en rouge.Coloriage NSTableView Texte par rangée

Comment ferais-je cela?

Répondre

6

En supposant que vous avez NSTextFieldCell dans votre tableau (pour les autres cellules, le réglage de la couleur du texte peut varier), vous pouvez réaliser ceci en implémentant une méthode déléguée NSTableView. D'abord, vous devez définir un délégué pour le NSTableView, dans Interface Builder ou dans votre code. Cela peut être votre contrôleur d'application par exemple.

Ensuite, mettre en œuvre juste la méthode suivante:

- (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]]; 
    } 
} 

Chaque fois que le NSTableView dessinera une cellule, vous avez la possibilité de le modifier avant de se tirer.

Consultez la page de documentation pour plus de détails.

+0

Dans le tableau que j'utilise, je n'ai que NSTextFieldCell's, mais que se serait-il passé si cette méthode ne fonctionnait pas telle quelle? – Tristan

+0

Eh bien, toutes les cellules n'ont pas les méthodes "textColor" et "setTextColor:", comme NSButtonCell. C'est juste une chose à vérifier. –

Questions connexes