Centrer une NSAttributedString dans un NSTextField

UniXUniX Membre
13:45 modifié dans API AppKit #1
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:

Réponses

  • BruBru Membre
    13:45 modifié #2
    As tu essayé de modifier l'attribut NSParagraphStyleAttributeName du dictionnaire des attributs de ta chaine ?

    Si non, essaie pour voir...

    Il te faudra auparavant créer un objet NSMutableParagraphStyle en mettant l'alignement centré (méthode setAligment:).

    .
  • LeChatNoirLeChatNoir Membre, Modérateur
    13:45 modifié #3
    ouais ca doit rouler avec ParagraphStyle.

    Sinon, il me semble qu'en interceptant le TextField partagé par les contrôles d'une appli, tu peux aussi le faire...

  • UniXUniX Membre
    13:45 modifié #4
    Oui j'ai déjà  essayé, mais ça ne fonctionne pas.
    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 ...
  • LeChatNoirLeChatNoir Membre, Modérateur
    13:45 modifié #5
    moi je ferai un truc de ce style :

    ...
    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]&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 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+
  • UniXUniX Membre
    13:45 modifié #6
    Bon, en fait, j'ai trouvé.

    J'avais essayé de passer l'attribut NSParagraphStyleAttributeName aux 2 NSMutableString que j'agrège ensuite, mais je l'avais passé comme ça :
    [maString setObject:style forKey:@&quot;NSParagraphStyleAttributeName&quot;]
    


    Or, il faut :
    [maString setObject:style forKey:NSParagraphStyleAttributeName]
    


    Pourtant, je passe des arguments du style:
    [maString setObject:font forKey:@&quot;NSFont&quot;]
    


    et là , c'est pris en compte ...
  • AliGatorAliGator Membre, Modérateur
    13:45 modifié #7
    Passer par @NSFont comme nom d'attribut, c'est mâl !  >:)

    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
  • UniXUniX Membre
    13:45 modifié #8
    o:)

    OK, OK, je ne veux pas risquer la morsure ....
    Je m'exécute de suite.
  • 13:45 modifié #9
    dans 1133871996:

    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.


    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).
Connectez-vous ou Inscrivez-vous pour répondre.