Moyen simple de changer la couleur d'un texte

respawnrespawn Membre
12:03 modifié dans API AppKit #1
Bonjour,

existe-t-il un moyen simple de changer la couleur d'un NSString ?

Merki

Réponses

  • schlumschlum Membre
    12:03 modifié #2
    dans 1219397681:

    Bonjour,

    existe-t-il un moyen simple de changer la couleur d'un NSString ?

    Merki


    NSAttributedString
  • respawnrespawn Membre
    12:03 modifié #3
    Je ne vois que des méthodes qui permettent de bidouiller dans les NSString ... Rien avec les couleurs, mais je dois être un peu bigleu ...
  • Philippe49Philippe49 Membre
    août 2008 modifié #4
    C'est pour écrire dans un NStextField, NSTEXTView, ... ou dans une custom view ?

    dans 1219398940:

    Je ne vois que des méthodes qui permettent de bidouiller dans les NSString ... Rien avec les couleurs, mais je dois être un peu bigleu ...

    Regarde la doc de NSAttributedString et celle de NSMutableAttributedString
  • respawnrespawn Membre
    12:03 modifié #5
    En fait, j'affiche des messages dans un NSText avec les lignes
    display = [[NSString alloc] initWithFormat:@&quot;ERROR : %@...&quot;,...];<br />				[o_answer_view setString:display] ;
    

    et je voudrais que certaines lignes (celles d'erreur) soient par exemple en rouge
  • schlumschlum Membre
    12:03 modifié #6
    On te parle de NSAttributedString depuis tout à  l'heure... Pourquoi persistes-tu avec NSString ?  ???
  • respawnrespawn Membre
    12:03 modifié #7
    Oui j'ai bien compris, j'ai juste mis mon code d'origine, mais je sais bien que je dois remplacer mes NSString par des NSAttributedString, ca ne me dit pas quelle fonction utiliser ... :o
  • ChachaChacha Membre
    12:03 modifié #8
    Regarde du côté de - (void)addAttributes:(NSDictionary *)attributes range:(NSRange)aRange, dans NSMutableAttributedString. En gros, tu crées du RTF (une chaà®ne enrichie d'attributs, comme police, couleur, taille, etc.)

    Si c'est juste pour de l'affichage, tu peux aussi utiliser un NSText ou un NSTextField et essayer setTextColor:

    +
    Chacha
  • respawnrespawn Membre
    12:03 modifié #10
    Bon ben je crois que je vais laisser tomber pour le moment.

    Merci schlum, j'ai déjà  épluché ça un paquet de fois avant de poser la question ...

    l'histoire des dictionnaires, range etc etc me parait beaucoup trop compliqué pour ce que je veux faire, je pensais qu'il existait une simple fonction setStringColor:blue ou setColor:blue ou qqch dans le genre ... mais non

  • NoNo Membre
    août 2008 modifié #11
    dans 1219414130:

    Bon ben je crois que je vais laisser tomber pour le moment.
    Merci schlum, j'ai déjà  épluché ça un paquet de fois avant de poser la question ...
    l'histoire des dictionnaires, range etc etc me parait beaucoup trop compliqué pour ce que je veux faire, je pensais qu'il existait une simple fonction setStringColor:blue ou setColor:blue ou qqch dans le genre ... mais non


    Tu regardes trop le petit bout de la lorgnette.

    Si ce que tu veux faire, c'est ajouter des lignes (de simples NSString) dans le textView dont certaines sont en rouge (les autres étant en noir) c'est simple à  faire en quelques lignes (même si dans l'exemple ci-dessous j'ai volontairement surdéveloppé le code) :
    <br />// creation des attributs<br />NSDictionary *attributRouge=[[NSDictionary alloc] initWithObjectsAndKeys:[NSColor redColor], NSForegroundColorAttributeName, nil];<br />NSDictionary *attributNoir=[[NSDictionary alloc] initWithObjectsAndKeys:[NSColor blackColor], NSForegroundColorAttributeName, nil];<br /><br />// creation de la ligne d&#39;erreur en rouge<br />NSString *ligneErreur=@&quot;ceci est une erreur&#092;n&quot;;<br />NSAttributedString *tempStr1=[[NSAttributedString alloc] initWithString:ligneErreur attributes:attributRouge];<br /><br />// ajout de cette ligne rouge dans le textView<br />[[txtview textStorage] appendAttributedString:tempStr1];<br />[tempStr1 release];<br /><br />// creation de la ligne normale en noir<br />NSString *ligneNormale=@&quot;ceci est ligne normale&#092;n&quot;;<br />NSAttributedString *tempStr2=[[NSAttributedString alloc] initWithString:ligneNormale attributes:attributNoir];<br /><br />// ajout de cette ligne noire dans le textView<br />[[txtview textStorage] appendAttributedString:tempStr2];<br />[tempStr2 release];<br />
    

  • 12:03 modifié #12
    Tu peux pas pour une NSString, mais oui pour un NSTextField, grâce à  setTextColor:

    Si tu comptes afficher ton texte dans une NSTextField tu peux faires comme ça:
    <br />NSString* monStringLeopard = @&quot;blabla&quot;;<br />[monTextField setStringValue:monStringLeopard];<br />[monTextField setTextColor:[NSColor blueColor]];<br />
    


    Si tu comptes dessiner le texte à  la main dans une vue par exemple, il te faut un NSAttributedString, et pour changer sa couleur c'est simple :
    <br />NSString* monStringLeopard = @&quot;Blabla&quot;;<br />NSMutableDictionary *attrs = [NSMutableDictionary dictionary];<br /><br />[attrs setObject:[NSColor blueColor] forKey:NSForegroundColorAttributeName];		<br />[attrs setObject:[NSFont fontWithName:@&quot;Lucida Grande&quot; size:12.0] forKey:NSFontAttributeName];<br />		<br />NSMutableAttributedString* attrString;<br />		<br />attrString = [[NSMutableAttributedString alloc] initWithString:monStringLeopard attributes:attrs];<br /><br />[attrString release];<br />
    


    Edit : grillé :D
  • respawnrespawn Membre
    12:03 modifié #13
    Oui mais ca va changer la couleur de tout le texte de mon NSTextField ... je voudrais juste une parmi les autres en rouge par exemple ...
  • Philippe49Philippe49 Membre
    12:03 modifié #14
    Tu utilises quelque chose comme le deuxième code d'EagleLouk avec les méthodes qui permettent de poser des attributs selon le range dans la chaà®ne.

    - (void)setAttributes:(NSDictionary *)attributes range:(NSRange)aRange

    - (void)addAttribute:(NSString *)name value:(id)value range:(NSRange)aRange

    - (void)removeAttribute:(NSString *)name range:(NSRange)aRange

    ....
Connectez-vous ou Inscrivez-vous pour répondre.