2009-03-25 6 views
0

J'ai une sous-classe NSView qui implémente acceptsFirstResponder, resignFirstResponder et becomeFirstResponder. Il met également en œuvre la méthode suivante:Comment obtenir des objets dans la chaîne du répondeur pour gérer les messages `insertText:`?

-(void)keyDown:(NSEvent *) event {
[self interpretKeyEvents:[NSArray arrayWithObject:event]]; }

Je gère les messages qui interpertKeyEvent: envoie dans une classe AppController (AppController est le délégué NSWindow et fait donc partie de la chaîne répondeur).

Cette approche fonctionne très bien pour la plupart des messages générés par interpertKeyEvent:, par exemple insertNewline:, moveUp: et moveDown:, mais il ne fonctionne pas pour insertText:.

Comment obtenir des objets dans la chaîne du répondeur pour traiter les messages insertText:?

+0

Pourriez-vous afficher le code pour interpretKeyEvents:? –

Répondre

0

Selon la documentation de l'implémentation standard par le NSResponder:

« La mise en œuvre NSResponder passe simplement ce message au prochain intervenant, ou émet un signal sonore s'il n'y a pas répondeur suivant. »

Deux possibilités viennent à l'esprit: soit votre point de vue est pas là où vous vous attendez qu'il soit dans la chaîne de répondeur, ou votre signature de la méthode ne correspond pas à ce qui est attendu:

  • (void) insertText: (id) aString

Comment implémentez-vous acceptedFirstResponder, resignFirstResponder et becomeFirstResponder? Votre application utilise-t-elle NSWindowControllers ou s'agit-il d'une application basée sur un document?

D'autres documents concernant l'architecture de gestion des événements:

http://developer.apple.com/DOCUMENTATION/Cocoa/Conceptual/EventOverview/EventArchitecture/EventArchitecture.html#//apple_ref/doc/uid/10000060i-CH3-SW2

0

Vous devez mettre en œuvre le protocole NSTextInput pour votre classe, puis insertText sera appelée. Jetez un oeil à nsterm.m dans Aquamacs pour un exemple de la façon de l'implémenter.

Questions connexes