Couleur de texte dans NSDataView

mac_manumac_manu Membre
02:33 modifié dans API AppKit #1
Bonjour,

Voici mon problème. J'ai une tableView où j'affiche les objets d'une array. Chaque famille de ces objets ont une référence NSColor. Comment procèder pour arriver le plus simplement possible à  afficher ces objets en fonction de leur couleur?

Merci et à  la prochaine

Réponses

  • Eddy58Eddy58 Membre
    02:33 modifié #2
    Je ne comprend pas trop par ce que tu entends par afficher tes objets en fonction de leur couleur, mais si tu veux modifier leur couleur dans la NSTableView, il faut implémenter une méthode delegate, pour modifier les attributs des NSCell : :)

    <br />-(void)tableView:(NSTableView *)tableView willDisplayCell:(id)cell forTableColumn:(NSTableColumn *)tableColumn row:(int)row<br />{<br />    [cell setTextColor:[NSColor redColor]];<br />}<br />
    
  • ClicCoolClicCool Membre
    02:33 modifié #3
    Oui Eddy

    Je crois même qu'il faut traiter tous les cas y compris ceux où la couleur doit "rester" celle par défaut (y'a en fait qu'une cell qui sert à  toutes les lignes à  tour de rôle)
  • mac_manumac_manu Membre
    02:33 modifié #4
    Merci les amis, c'est exactement ce que je cherchais!! Y'a pas a dire, c'est quand même le pied ces forums!!
    A la prochaine les gars :spot:
  • plisskenplissken Membre
    02:33 modifié #5
    dans 1098219877:

    Si tu veux modifier leur couleur dans la NSTableView, il faut implémenter une méthode delegate, pour modifier les attributs des NSCell

    <br />-(void)tableView:(NSTableView *)tableView willDisplayCell:(id)cell forTableColumn:(NSTableColumn *)tableColumn row:(int)row<br />{<br />&nbsp; &nbsp; [cell setTextColor:[NSColor redColor]];<br />}<br />
    



    Salut tout le monde

    Il s'agit d'un vieux topic, mais je viens d'essayer cette methode et j'ai quelques petits problemes.

    1 - J'arrive pas a bien controler quand il va faire appel a cette fonction. Je parviens a controler quel cell je modifie en faisant un test sur [tableColumn identifier] et sur le numero de la ROW.

    2 - Il me modifie bien la couleur de ma cellule, mais si je fais un reloadData sur ma table, il me change toutes les cellules avec la couleur defini pour cette cellule specifique.

    Voila un exemple :
    <br />NSString *colIdent = [tableColumn identifier];<br />if ([colIdent compare:@&quot;myColumnIdentifier&quot;] == NSOrderedSame)<br />{<br />	if([filesTableView selectedRow] == 1)<br />	{<br />		[cell setTextColor:[NSColor redColor]];<br />	}<br />}<br />
    


    Merci :)
  • BruBru Membre
    02:33 modifié #6
    dans 1152755371:

    Salut tout le monde

    Il s'agit d'un vieux topic, mais je viens d'essayer cette methode et j'ai quelques petits problemes.

    1 - J'arrive pas a bien controler quand il va faire appel a cette fonction. Je parviens a controler quel cell je modifie en faisant un test sur [tableColumn identifier] et sur le numero de la ROW.

    2 - Il me modifie bien la couleur de ma cellule, mais si je fais un reloadData sur ma table, il me change toutes les cellules avec la couleur defini pour cette cellule specifique.

    Voila un exemple :
    <br />NSString *colIdent = [tableColumn identifier];<br />if ([colIdent compare:@&quot;myColumnIdentifier&quot;] == NSOrderedSame)<br />{<br />	if([filesTableView selectedRow] == 1)<br />	{<br />		[cell setTextColor:[NSColor redColor]];<br />	}<br />}<br />
    


    Merci :)


    Normal.
    Tu modifies par setTextColor: la couleur du NSCell prototype (celui qui sert à  afficher TOUTES les autres cellules) pour une cellule.
    Mais tu ne remets pas la couleur d'origine avant modification. D'où une "recolorisation" du reste de la table dès un réaffichage complet.

    Pour palier à  ça, tu peux faire ceci :
    - ajoute une variable d'instance de type NSColor dans ta classe (celle qui contient le delegate tableView:willDisplayCell:forTableColumn:row:), par exemple NSColor *couleurOriginale;
    - initialise cette nouvelle variable d'instance (par exemple dans awakeFromNib) à  nil.
    - enfin dans le delegate :
    <br />NSString *colIdent = [tableColumn identifier];<br /><br />// mémorisation de la couleur originale<br />if (couleurOriginal==nil) couleur originale=[cell textColor];<br /><br />// changement de couleur<br />if ([colIdent isEqual:@&quot;myColumnIdentifier&quot;] &amp;&amp; [filesTableView selectedRow]==1)<br />{<br />&nbsp; &nbsp; [cell setTextColor:[NSColor redColor]];<br />}<br /><br />// sinon on remet la couleur originale<br />else<br />{<br />&nbsp; &nbsp; [cell setTextColor:couleurOriginale];<br />}<br />
    


    .
  • plisskenplissken Membre
    02:33 modifié #7
    dans 1152774144:

    Normal.
    Tu modifies par setTextColor: la couleur du NSCell prototype (celui qui sert à  afficher TOUTES les autres cellules) pour une cellule.
    Mais tu ne remets pas la couleur d'origine avant modification. D'où une "recolorisation" du reste de la table dès un réaffichage complet.


    Ok merci, j'ai pas bien compris pourquoi le (id)cell correspondait au NSCell prototype du coup modifiait toutes les autres cellules.

    Mais bon au moins j'ai compris d'ou venait mon erreur... trop con de ma part.
    Au changement de couleur je dois mettre mon row:(int)row et non pas [filesTableView selectedRow]

    example qui marche pour modifier que la row 1
    <br />// changement de couleur<br />if ([colIdent isEqual:@&quot;myColumnIdentifier&quot;] &amp;&amp; [b]row[/b]==1)<br />{<br />&nbsp; &nbsp; [cell setTextColor:[NSColor redColor]];<br />}<br />
    


    Voila.  :)
Connectez-vous ou Inscrivez-vous pour répondre.