2013-06-05 8 views
0

J'essaye d'intercepter les actions de clavier CMD + et CMD dans mon NSView - pour augmenter et diminuer la taille de la police de certains textes personnalisés. Pour diverses raisons, je ne peux pas simplement utiliser un NSTextView. Est-ce que quelqu'un sait la bonne façon de gérer cela? Si je comprends bien, ce sont des équivalents clés pour les éléments de menu. Je peux 'activer' les éléments du menu en implémentant changeFont: et je peux piéger la touche en implémentant performKeyEquivalent: mais cela semble un peu un hack. Aussi quand changeFont est appelé, il n'est pas clair comment j'interprète le fait qu'il a été appelé pour CMD +/- car il m'envoie simplement un NSFontManager. Me fais me demander si je suis en train de manipuler le mauvais message?Gérer CMD + dans un NSView

Merci d'avance.

+0

Avez-vous examiné la sous-classe '[NSView keyDown:]'? – trojanfoe

+0

keyDown n'est pas appelé pour CMD +/- parce que c'est un équivalent clé (je crois) Il ne résout pas non plus le problème de savoir comment gérer le cas où l'option de menu équivalente Text-> Font-> Bigger/Smaller est sélectionnée directement. Merci – Scotty

+0

Le message '-modifyFont:' de NSFontManager indique que lorsque vous recevez le message d'action '-changeFont:', vous appelez la méthode '--convertFont:' de NSFontManager avec votre police actuelle. Il retournera une police modifiée en fonction du choix des utilisateurs. –

Répondre

1

Gerd (voir les commentaires ci-dessus) m'a fait trier. Dans mon gestionnaire changeFont, je crée une police temporaire de taille 10, puis la renvoie au gestionnaire de polices et vérifie la taille de la police renvoyée. Si elle est plus grande alors CMD + a été pressé, s'il était plus petit alors CMD- a été pressé.

- (void)changeFont:(id)sender 
{ 
    NSFontManager* fm = sender; 

    NSFont* fntBefore = [NSFont systemFontOfSize:10]; 
    NSFont* fntAfter = [fm convertFont:fntBefore]; 

    CGFloat delta = fntAfter.pointSize - fntBefore.pointSize; 
}