2009-06-16 10 views
0

Je fais une application de test en plein écran en utilisant this guide. Cependant, je rencontre un problème lorsque je veux obtenir des informations clés.Plein écran Actions vers le bas

Pour une raison quelconque, il semble que lorsque vous définissez le NSPanel pour prendre l'écran, vous perdez également la possibilité pour qu'il obtienne les événements de clé. J'ai essayé de faire un déclencheur de bouton lorsque l'utilisateur tape s, ce qui fonctionne bien dans un panneau classique, mais ne semble pas fonctionner lorsque ce changement est appliqué.

Répondre

0

Il est possible d'atteindre. Assurez-vous que votre sous-classe NSPanel (y a-t-il une raison pour laquelle vous n'utilisez pas une fenêtre?) -canBecomeKeyWindow, et à la fois le panneau et contentView-acceptsFirstResponder méthodes pour retourner TRUE.

Une autre approche de niveau inférieur que vous pourriez essayer si vous concevez une application qui utilise une interface utilisateur non standard (comme un jeu), est de sous-classer la méthode NSApplication - sendEvent. Le mien ressemble à:

- (void)sendEvent:(NSEvent *)event 
{ 
    id delegate = [self delegate]; 

    if(([event type] != NSAppKitDefined) && [delegate shouldHandleEvents] && [delegate respondsToSelector:@selector(handleEvent:)]) 
     [delegate handleEvent:event]; 
    else 
     [super sendEvent:event];  
} 
+0

Harry Jordan: J'utilise NSPanel parce que ce qu'il a dit de faire dans un tutoriel sur les applications en plein écran. :) Est-il préférable d'utiliser un NSWindow dans ce cas? Je ne sais pas si mon application utilise une interface utilisateur standard, mais je ne le crois pas. Donc, dans ce cas, devrais-je simplement sous-classer -canBecomeKeyWindow et faire ces deux méthodes -acceptsFirstResponder pour retourner TRUE? – PF1

+0

La raison principale pour utiliser un NSPanel, sur une fenêtre normale est généralement pour l'apparence (barre de titre mince), et la façon dont il interagit avec les événements et autres fenêtres (c'est-à-dire flottant). En tant que paramètre par défaut, un panneau ne devient pas la fenêtre de la clé d'application à moins d'être spécifiquement demandé par une sous-vue. Si vous avez besoin d'utiliser NSPanel, vous pouvez résoudre ce problème en définissant l'attribut getsKeyOnlyIfNeeded de panneaux sur FALSE. Mais la réponse courte, est que je vous recommande d'utiliser NSWindow pour votre exemple. –

+0

Harry: J'envisage fortement d'utiliser un NSWindow après avoir lu votre réponse, mais je ne sais pas si cela fonctionnera dans cette situation. En tout cas, merci pour votre aide - j'ai maintenant le problème résolu. – PF1