Centrer une NSAttributedString dans un NSTextField
UniX
Membre
Salut.
J'ai crée une NSAttributedString que je souhaiterais afficher dans un NSTextField de façon centrée. J'ai essayé tout un tas de manips (dans IB, par code en agissant sur le NSTextFiels, par code en agissant sur la NSAttributedString), mais je n'ai pas réussi à trouver la bonne .... >:(
La NSAttributedString est mise dans le NSTextFiels avec setAttributedStringValue:
J'ai crée une NSAttributedString que je souhaiterais afficher dans un NSTextField de façon centrée. J'ai essayé tout un tas de manips (dans IB, par code en agissant sur le NSTextFiels, par code en agissant sur la NSAttributedString), mais je n'ai pas réussi à trouver la bonne .... >:(
La NSAttributedString est mise dans le NSTextFiels avec setAttributedStringValue:
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Si non, essaie pour voir...
Il te faudra auparavant créer un objet NSMutableParagraphStyle en mettant l'alignement centré (méthode setAligment:).
.
Sinon, il me semble qu'en interceptant le TextField partagé par les contrôles d'une appli, tu peux aussi le faire...
Le truc c'est que ma NSAttributedString est en fait composée de 2 NSAttributedStrings agrégées. J'ai essayé en mettant cet attribut dans les 2 dictionnaires.
Pour ton idée LeChatNoir, je comprends pas bien ...
...
NSMutableDictionary *tempAttributes = [NSMutableDictionary dictionaryWithDictionary:
TonAttributedStringValue] attributesAtIndex:0 effectiveRange:NULL;
NSMutableParagraphStyle *style = NSMutableParagraphStyle alloc] init];<br />[style setParagraphStyle:[NSParagraphStyle defaultParagraphStyle;
[style setAlignement:[NSCenterTextAlignment]];
[tempAttributes setObject:style forKey:NSParagraphStyleAttributeName];
[style release];
NSMutableAttributedString *newAttributedString = NSMutableAttributedString alloc] initWithAttributedString:[self attributedStringValue;
[newAttributedString setAttributes:tempAttributes range:
NSMakeRange(0, [newAttributedString length])];
...
Sinon, avec le field Editor, tu le récupère dans un NSText et tu dois pouvoir le formater...
Genre :
NSText * editor = [[self window] fieldEditor:YES forObject:self];
[editor alignCenter];
Un truc du genre (non testé tout ça :-\\)....
a+
J'avais essayé de passer l'attribut NSParagraphStyleAttributeName aux 2 NSMutableString que j'agrège ensuite, mais je l'avais passé comme ça :
Or, il faut :
Pourtant, je passe des arguments du style:
et là , c'est pris en compte ...
En fait tout est dit ici dans la doc Apple
Il faut utiliser les constantes prédéfinies et non leur valeurs.
Ces constantes prédéfinies, pour le cas des noms des attributs que tu veux modifier, c'est des NSXXXAttributeName.
Il se trouve que la constante NSFontAttributeName doit sûrement valoir la chaà®ne @NSFont, mais tu n'es pas sens utilisé la valeur de cette constante directement, mais la constante elle-même.
Apple peut décider de changer la valeur de cette constante quand ça lui chante d'une version d'OSX à une autre sans avoir à t'en informer.
Conclusion : remplace dans ton code existant tous tes @NSFont par des NSFontAttributeName !!! Et n'utilise plus jamais @NSFont comme paramètre de ces méthodes pour changer le style, mais toujours NSFontAttributeName
OK, OK, je ne veux pas risquer la morsure ....
Je m'exécute de suite.
Ce n'est pas le plus important à mes yeux, car il est possible (je n'en suis pas sur) que changer la valeur des constantes posera des problèmes de compatibilité avec des exécutables compilés pour d'anciennes versions d'OS X. Le fait de se tromper dans le nom d'une constante entrainera une erreur à la compilation, tandis que si tu te trompes dans l'écriture d'une NSString tu remarqueras juste au runtime que ça ne marche pas, et l'erreur peut dès lors plus difficile à débusquer (car bien entendu si erreur il y a, d'autres causes sont possibles).