tout d'abord, vous devez créer une sous-classe de NSWindow. Dans xcode do: Fichier -> Nouveau fichier -> Objective C Class. donne un nom comme "NSWindowMyEvents". Cela va créer 2 fichiers: .h .m &, allez à la NSWindowMyEvents.h et faire la déclaration comme suit:
@interface NSWindowMyEvents : NSWindow {
}
Enregistrer les modifications et compiler (pour être sûr que IB lit le nouvel en-tête 0 si elle est déjà ouvert).
Ouvrez le générateur d'interface et chargez votre fichier nib/xib qui contient votre document/fenêtre principale. Assurez-vous que la sortie "fenêtre" du propriétaire du fichier est définie sur votre fenêtre principale. Cliquez sur votre fenêtre principale (celle que vous voulez obtenir des événements) et définissez sa classe (via l'inspecteur d'identité cmd + 6) pour être: NSWindowMyEvents au lieu de NSWindow que c'est maintenant.
Enregistrer les modifications!
Retour à Xcode et NSWindowMyEvents.m et collez le code suivant:
- (void)keyDown:(NSEvent *)theEvent
{
NSLog(@"keyDown!");
if ([[NSApp currentEvent] modifierFlags] & NSCommandKeyMask)
{
NSLog(@"CommandKey Down!");
}
[super keyDown:theEvent];
}
Envoyer l'événement Super si vous voulez, passer l'événement au reste répondeur chaîne. Vous manipulez maintenant les événements clavier. De même, vous pouvez gérer n'importe quel événement dans NSWindowMyEvent.m
espoir qui aide ....
Je ne peux pas définir InitialFirstResponder chez le propriétaire du fichier .... –
Je crois que les informations à http://developer.apple.com/mac/library/DOCUMENTATION/ Cocoa/Conceptuel/EventOverview/HandlingKeyEvents/HandlingKeyEvents.html #/apple_ref/doc/uid/10000060i-CH7 doit s'appliquer aux applications basées sur NSDocument. – geoffspear
Si j'ai bien compris ce n'est pas possible ... –