Couleur de texte d'une ligne d'une NSTableView
Rocou
Membre
Bonjour,
Je voudrais changer la couleur de certaines lignes d'une NSTableView selon certains critères.
J'ai donc surchargé la méthode:
ça fonctionne, voici le code:
Mais j'aimerais changer la couleur non pas en fonction du numéro de ligne mais en fonction du contenu d'une cellule en particulier. Je n'y arrive pas, mon programme plante à chaque tentative.
J'ai testé ceci qui me parait pourtant très correct:
Le simple fait d'ajouter cette ligne de code crashe l'application.
Je voudrais changer la couleur de certaines lignes d'une NSTableView selon certains critères.
J'ai donc surchargé la méthode:
(NSCell *)tableView:(NSTableView *)tv dataCellForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
ça fonctionne, voici le code:
- (NSCell *)tableView:(NSTableView *)tv dataCellForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {<br /> NSTextFieldCell *cell = [tableColumn dataCell];<br /> if ( tv == tableViewPrestations ) <br /> { <br /> <br /> if(row == 0) {<br /> [cell setTextColor: [NSColor redColor]];<br /> } else {<br /> [cell setTextColor: [NSColor blackColor]];<br /> }<br /> }<br /> return cell;<br />}<br />
Mais j'aimerais changer la couleur non pas en fonction du numéro de ligne mais en fonction du contenu d'une cellule en particulier. Je n'y arrive pas, mon programme plante à chaque tentative.
J'ai testé ceci qui me parait pourtant très correct:
NSString *monCritere = [[tableViewPrestations preparedCellAtColumn:1 row:row] stringValue];
Le simple fait d'ajouter cette ligne de code crashe l'application.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
D'abord il demande la cellule, puis le contenu, donc si tu demandes le contenu au moment où il demande la cellule, ça ne va pas aller.
Ha ok mais alors, où donc le meilleur endroit (moment?) pour récupérer le contenu d'une cellule afin de m'en servir comme critère?
- (void)tableView:(NSTableView *)aTableView willDisplayCell:(id)aCell forTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex
Merci mais le problème est le même :-\\
Pourquoi ne pas tout simplement binder le TextColor des colonnes de ta tableView
avec la propriété qui te sert de critère, en utilisant un NSTransformer
qui, en fonction du critère reçu (ici une NSString) renvoi un NSColor Approprié.
Ou, si t'es pas familiarisé avec les transformers,
tu peux aussi créer une propriété (laBonneCouleur par ex) transient en readOnly
dont l'accesseur ira lire ta propriété critère (la NSString) et renverra un NSColor approprié.
A ce moment là plus besoin de valueTranformer pour Binder la TextColor de tes
colonnes de ta TableView sur ta propriété "fictive" laBonneCouleur
Non, si le délégate de la table est le même objet que le data source, tu peu faire la vérification des critères selon le tableau de données sources. Cela évite de chercher à accéder à des cellules qui n'existe pas.
Dans l'hypothèse que le tableau source est : montableau
tu fait :
PS : Je viens d'écrire ce code en live et je ne l'ai pas testé. Le principe est là !