Comment savoir si quelques mots dans un NSTextView sont écrits en gras et les autres non.

HerveHerve Membre

Bonjour,

Je n'arrive pas à trouver la solution : j'ai besoin que l'utilisateur mette en gras les mots importants d'un texte dans un NSTextView et que le logiciel les détecte ensuite automatiquement.

Le problème vient t-il de cette méthode?
leTexte = [[NSAttributedString alloc]initWithString:leTexteZone.string];
Est-ce que cette méthode récupère bien les données de police de caractère?

Ensuite je sépare les mots avec
NSArray* phrases = [stringWithoutA componentsSeparatedByString:@" "];</p> <pre><code>phrasesDuTexte = [[NSMutableArray alloc]initWithArray:phrases];

Puis je fais
<br /> for (int i = 0; i &lt; phrasesDuTexte.count; i++){<br /> NSString *aString = [phrasesDuTexte objectAtIndex:i];<br /> NSRange unLieu = [leTexte.string rangeOfString:aString];

Puis j'utilise une méthode que j'ai trouvé en bas de cette page
https://stackoverflow.com/questions/19773129/nsattributedstring-get-font-attributes
mais elle ne fonctionne pas. Plus exactement, le NSFont n'existe pas.

C'est étonnant, il est très facile de mettre en couleur ou de changer les caractères d'un texte avec les méthodes de NSText, mais pas moyen de faire l'inverse : quelle est la couleur ou le NSFont à ce NSRange.
Auriez-vous une idée?

Réponses

  • DrakenDraken Membre

    A mon avis ta propriété .leTexteZone ne contient que du TEXTE. La convertir en NSAttributedString n'ajoute pas miraculeusement les enrichissements typographiques qui sont conservés ailleurs (mais où ?). J'ai cherché s'il n'y avais pas une propriété AttributedString dans le NSTextView, sans rien trouvé. C'est le foutoir ce truc..

    Avant de prendre la fuite, j'ai vu que NSTextView a des fonctions RTF (RichFont) quelque chose. Il est peut être possible de récupérer le contenu du NSTextView au format RTF et de faire quelque chose avec, lire les attributs GRAS du RTF ou le convertir en NSAttributedString. Bonne chance..

  • HerveHerve Membre

    Merci Draken.

    J'ai vérifié au sujet de richFont : le NSTextView est en "rich font" par défaut (vérif en console). Le problème vient certainement de la capture du texte dans mon objet NSAttibutedString. Et là, gros bugg!!

    Les méthodes de type
    [monTextView setFont:monNSFont range:monNSRange]
    marchent très bien. Je cherche désepérément l'inverse, un get et non un set...

  • HerveHerve Membre

    J'ai trouvé un début de solution. La voici
    monAttTexte = [[NSAttributedString alloc]initWithString:monNSView.string attributes:monNSView.typingAttributes];
    Cette fois, je récupère bien un NSAttributedString.

    Par contre, alors que des mots sont en gras et d'autres non, tous sont détectés comme le premier : si il est gras, ils le sont tous ou l'inverse.

    Cherchons encore....

  • LarmeLarme Membre
    C’est apparemment le textview.textstorage qui contient l’attributeString
    Du coup NSMutableAttributedString *attrstr = [myTextView.textStorage mutableCopy]
  • DrakenDraken Membre
    29 juil. modifié #6

    @Herve a dit :

    Par contre, alors que des mots sont en gras et d'autres non, tous sont détectés comme le premier : si il est gras, ils le sont tous ou l'inverse.

    Cherchons encore....

    Il y a quelque part sur ce forum une méthode (en swift) prenant un attributedString et le décomposant en un tableau de mots. C'est AliGator l'avait réalisé pour répondre à un de mes problèmes.

    EDIT : Trouvé
    https://cocoacafe.fr/index.php?p=/discussion/comment/140314#Comment_140314

  • HerveHerve Membre

    Bien vu Larme!! C'était bien ça. :))

    Merci Draken, je conserve le lien précieusement (bien que je sois encore avec Objectiv-C : de toutes façons les nouveaux frameworks sont obligatoirement en swift, aussi...)

    Résolu!! (Deux jours sur ce /=++!= de truc).

  • HerveHerve Membre

    Comment modifie t-on le titre pour marquer "Résolu" déjà? Merci encore.

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