Couleur de texte d'une ligne d'une NSTableView

RocouRocou Membre
22:54 modifié dans API AppKit #1
Bonjour,

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&nbsp; ) <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.

Réponses

  • schlumschlum Membre
    22:54 modifié #2
    Parce que ça n'existe pas à  ce moment...
    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.
  • RocouRocou Membre
    22:54 modifié #3
    dans 1254839957:

    Parce que ça n'existe pas à  ce moment...
    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?
  • mpergandmpergand Membre
    22:54 modifié #4
    Essaye:
    - (void)tableView:(NSTableView *)aTableView willDisplayCell:(id)aCell forTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex
  • RocouRocou Membre
    22:54 modifié #5
    dans 1254848240:

    Essaye:
    - (void)tableView:(NSTableView *)aTableView willDisplayCell:(id)aCell forTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex

    Merci mais le problème est le même  :-\\
  • ClicCoolClicCool Membre
    22:54 modifié #6
    Bonsoir,

    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
  • wiskywisky Membre
    octobre 2009 modifié #7
    dans 1255358399:

    dans 1254848240:

    Essaye:
    - (void)tableView:(NSTableView *)aTableView willDisplayCell:(id)aCell forTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex

    Merci mais le problème est le même  :-\\

    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 :
    if([[[montableau objectAtIndex:rowIndex] objectForKey:@&quot;Ma clé&quot;] isEqualToString:@&quot;moi&quot;]){<br />[aCell setTextColor:[NSColor blueColor]];<br />}else{<br />[aCell setTextColor:[NSColor blackColor]];<br />}
    



    PS : Je viens d'écrire ce code en live et je ne l'ai pas testé. Le principe est là  !
Connectez-vous ou Inscrivez-vous pour répondre.