2010-08-27 34 views
1

J'ai une application graphique qui utilise une instance de NSTextField pour l'édition de texte sur place, cette fonctionnalité a été ajoutée depuis longtemps et je n'ai jamais eu de raison de la vérifier, cependant, j'ai récemment reçu un rapport: le texte déposé ne permet pas le formatage du texte. Format -> Les sous-éléments du menu Texte sont tous désactivés, il n'y a donc aucun moyen de définir le paragraphe d'un élément de texte.Mise en forme du texte dans NSTextField

La question: comment dois-je configurer le NSTextField pour supporter l'édition de paragraphe? Je suis sûr que cela a fonctionné avant puisque j'ai quelques projets avec du texte formaté et NSTextField était là depuis que l'application est née. Ai-je raté quelque chose avec les mises à jour système/XCode?

Mon NSTextField est multiligne, modifiable, permet de modifier les attributs de texte.

Répondre

3

Si quelqu'un face à cela à l'avenir, je peux décrire le problème dans les détails:

  1. NSTextView refuse d'appliquer le formatage s'il n'y a pas la règle utilisée (avec mise à jour récente du système d'exploitation, je suppose)
  2. NSTextField lui-même ne fait pas d'édition de texte, il utilise une instance NSTextView partagée pilotée par le propriétaire NSWindow
  3. L'éditeur de texte par défaut de NSWindow n'utilise pas de règles.

Cette opération a désactivé la mise en forme du texte lors de l'utilisation de NSTextField.

Solution est de sous-classe la NSWindow:

@implementation MyWindow 

- (NSText *)fieldEditor:(BOOL)createWhenNeeded forObject:(id)anObject 
{ 
    NSText* text = [super fieldEditor:createWhenNeeded forObject:anObject]; 
    if ([text isKindOfClass:[NSTextView class]]) 
     [(NSTextView *)text setUsesRuler:YES]; 
    return text; 
} 

@end 

Et le tour est joué, la mise en forme est de retour.