[Résolu] Modification de la couleur d'une fonte définie
berfis
Membre
Bonjour,
Un point de détail, qui me fait errer dans la doc depuis quelques heures. J'aimerais passer en rouge (à l'affichage uniquement) une fonte déjà définie par l'utilisateur, en gardant les attributs définis par lui, y compris la couleur.
Texte quelconque --> Texte quelconque
Texte quelconque --> Texte quelconque
Texte quelconque --> Texte quelconque
Le texte est dans une NSString (donc les attributs de texte s'appliquent à l'ensemble de la chaà®ne). Je peux sans problème accéder à la NSFont choisie, mais comment "rajouter" l'attribut "fontColor = red"?
Merci.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Sur iOS textColor est une propriété de UILabel. Sur OSX j'ai pas révisé mais ça doit être le même principe, une propriété de NSLabel ou je ne sais quoi dans ce goût la.
Bonjour AliGator,
Je dessine directement ma propriété NSString, je n'ai pas de NSLabel:
La couleur est stockée via la clé NSForegroundColorAttributeName du NSDictionary des attributs de la NSString. Maintenant, j'aimerais récupérer les attributs définis par l'utilisateur pour les stocker dans [NSColor textColor]. Actuellement, je les "écrase" en définissant NSColor *textColor = [NSColor blackColor] et en priant pour que l'utilisateur en reste au noir, mais bien sûr il va s'en trouver un (ou une) pour vouloir du mauve et s'étonner que ça ne marche pas...
Il faut utiliser NSAttributedString
Ca marche aussi avec NSString, il faut juste que tu conserves le dico des attributs pour pouvoir le modifier et l'utiliser à chaque drawInRect
Comment conserver le dictionnaire d'une NSString? Mon idée était:
1. Récupérer le dictionnaire de la fonte définie par l'utilsateur
2. Modifier la clé NSForegroundColorAttributeName
3. drawInRect
Un NSString n'a pas d'attribut/dico normalement...
Uniquement les NSAttributedString...
Donc à moins de faire une classe spéciale avec un String et un Dico, ça risque d'être plus dur...
Sur un NSAttributedString, tu peux aisément récupérer les Attributs, y'a pleins de trucs sur le net pour faire ça, entre les enumerateAttributed:InRange:XxX ou attributesAtIndex:XxX, etc.
https://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSString_AppKitAdditions/Reference/Reference.html
Normalement non, mais Appkit a ajouté quelques routines bienvenues.
PS: Ma NSString est un attribut Core Data, je ne peux pas en faire une NSAttributedString à la légère.
Maintenant, s'il faut 15 lignes de code pour changer la couleur d'une string, je la laisse en noir...
Intéressant.
Mais je pense que ces attributs ne sont que pour faire un simili NSAttributedString avec un NSString pour du draw... Du coup, pas réellement d'attributs en soit lié au NSString...
J'ai pas regardé en profondeur, mais je me demande si ce n'est pas pour faire :
[monAttrbutedString string] drawblabla withAttributes:[monAttributedString attributed] (écrit en pseudo code).
Finalement, j'ai défini la couleur "de base" dans un nouvel attribut. ça m'a forcé à me mettre au Core Data Model Versioning et à la migration des données.
Avant que je m'y mette ça avait l'air compliqué, et une fois réalisé j'en viens à me demander ce qui m'a retenu si longtemps...
Reste un truc: j'aimerais pouvoir transformer le message orienté-programmeur:
La migration du magasin persistant a échoué car le modèle d'objet géré source est absent.
par quelque chose de plus orienté-utilisateur, comme:
Ce document a été créé avec une version plus récente de "MonApp" et ne peut être ouvert.
Mais c'est un autre sujet.
En tous les cas, merci de votre aide et de vos propositions concrètes!
(t'en a jamais fait mention dans ton post avant le dernier...)
"une fonte déjà définie par l'utilisateur, en gardant les attributs définis par lui, y compris la couleur." (#1)
"PS: Ma NSString est un attribut Core Data, je ne peux pas en faire une NSAttributedString à la légère." (#7)
Maintenant, le modèle qu'il y a derrière, who cares... ^_^
Par contre j'ai tjs du mal à comprendre les formulation que tu as utilisées #1 étant donné que la couleur n'est ni une propriété de NSString ni de NSFont
Ce qui m'a induit en erreur, en fait, c'est qu'il existe une option "couleur" sur le panel du NSFontManager. Et cette clé dans le dictionnaire de NSString drawAtPoint. Mais ça roule, maintenant!
... La doc, c'est toi -_-