NSMutableAttributedString et NSTextView

VeillardVeillard Membre
23:27 modifié dans API AppKit #1
Bonsoir tout le monde  :)

Je voudrais attribuer un ou plusieurs styles à  quelques mots qui doivent s'afficher dans une TextView. Pour cela, j'ai utilisé les NSMutableAttributedString pour construire petit à  petit mon texte mis en forme. Mais ce que je n'arrive pas à  faire c'est afficher le résultat dans ma TextView (ça marche bien avec NSMutableString).

Comment feriez-vous ?

Réponses

  • mars 2005 modifié #2
    [tt][[textView textStorage] setAttributedString:yourAttrStr];[/tt]

    [EDIT] ouf, personne ne m'a grillé
  • VeillardVeillard Membre
    23:27 modifié #3
    Merci Renaud  ;)
  • VeillardVeillard Membre
    23:27 modifié #4
    Bon, je me lance dans les AttributesStrings. J'avoure que c'est un peu lourd quand on écrit :
    NSMutableAttributedString *syntheseText = [[NSMutableAttributedString alloc] initWithString:@&quot;&quot;];<br />	<br />NSMutableAttributedString *temp = [[NSMutableAttributedString alloc] initWithString:@&quot;Plongée N° : &quot;];<br />[temp addAttribute:NSForegroundColorAttributeName value:[NSColor blueColor] range:NSMakeRange(0, 12)];<br />	<br />[syntheseText appendAttributedString: temp];<br />
    


    Existe-t-il un moyen pour coloriser un mot sans calculer au préalable sa longueur. Tout ça parce que la longueur des mots change en fonction de la langue  :P
  • BruBru Membre
    23:27 modifié #5
    dans 1109860240:

    Existe-t-il un moyen pour coloriser un mot sans calculer au préalable sa longueur. Tout ça parce que la longueur des mots change en fonction de la langue  :P


    As tu essayé d'entrer ton texte avec des balises RTF ou HTML ? Car NSAttributedString est capable d'utiliser des textes HTML (initWithHTML...) ou RTF (initWithRTF...) pour s'initialiser...

    .
  • BruBru Membre
    23:27 modifié #6
    Je n'ai pas de Mac sous la main, mais le code suivant devrait fonctionner (à  voir...) :
    [tt]
    NSString *chaineHTML;
    NSData *dataHTML;
    NSAttributedString *chaineAttrib;

    chaineHTML=@<html><body>Je <font color=red">plonge</font> bientôt.</body></html>";
    dataHTML=[chaineHTML dataUsingEncoding:NSMacOSRomanStringEncoding];
    chaineAttrib=[[NSAttributedString alloc] initWithHTML:dataHTML documentAttributes:NULL];
    [syntheseText appendAttributedString:chaineAttrib];
    [chaineAttrib release];
    [/tt]

    Et si tout va bien, la chaà®ne dervrait resortir comme ça :

    Je plonge bientôt.

    .
  • VeillardVeillard Membre
    23:27 modifié #7
    Merci Bru, je vais essayer...
  • VeillardVeillard Membre
    23:27 modifié #8
    Ton exemple fonctionne bien mais comment je peux modifier mon texte dans :

    chaineHTML=@&quot;&lt;html&gt;&lt;body&gt;Je &lt;font color=&quot;&quot;red&quot;&quot;&gt;plonge&lt;/font&gt; bientôt.&lt;/body&gt;&lt;/html&gt;&quot;;
    

    en fonction de la langue ?

    D'habitude, j'utilise ça pour localiser :

    [[NSBundle mainBundle] localizedStringForKey:@&quot;Dive number&quot; value:@&quot;error !&quot; table:@&quot;Carnet&quot;]
    
  • Eddy58Eddy58 Membre
    mars 2005 modifié #9
    Il faut jouer avec les appendString (mais bon il y a peut-être d'autres solutions). :)
    Voici un code (loin d'être testé) pour le principe :
    [tt]
    NSMutableString *chaineHTML=NSMutablestring alloc] initWithString:@&quot;&lt;html&gt;&lt;body&gt;&quot;];<br />[chaineHTML appendString:[[NSBundle mainBundle] localizedStringForKey:@&quot;Dive number&quot; value:@&quot;error !&quot; table:@&quot;Carnet&quot;;
    [chaineHTML appendString:@<font color="red"">"];
    [chaineHTML appendString:NSBundle mainBundle] localizedStringForKey:@&quot;Other number&quot; value:@&quot;error !&quot; table:@&quot;Carnet&quot;;
    [chaineHTML appendString:@</font></body></html>];
    [/tt]
    Au final ça fait beaucoup de code et je me demande si ça vaut vraiment le coup....???
  • VeillardVeillard Membre
    23:27 modifié #10
    C'est bien ce qui me fait peur, j'ai peur que ce soit un peu lourd...
  • mars 2005 modifié #11
    Allez, on continue la surenchère...

    [tt]NSString* html = [NSString stringWithFormat:
        NSLocalizedStringFromTable(@html,@Carnet,nil),
        NSLocalizedStringFromTable(@key1,@Carnet,nil),
        NSLocalizedStringFromTable(@key2,@Carnet,nil)];[/tt]

    où dans Carnet.strings, la valeur correspondant à  html vaut:
    [tt]<html><body>%@<;font color=""red"">%@<;/font></body></html>[/tt]

    Avec l'avantage de pouvoir mettre tout le texte "constant" localisé dedans.
  • VeillardVeillard Membre
    23:27 modifié #12
    Là , c'est plus cool, je me laisserais bien tenter  ;)
Connectez-vous ou Inscrivez-vous pour répondre.