Rendre une vue réceptrice des appuis au clavier

UniXUniX Membre
15:43 modifié dans API AppKit #1
Salut.

Bon, en ce moment, je suis à  fond dans les vues ....
Mon problème actuel : j'ai une fenêtre qui contient une vue perso dérivée de NSView, et une NSTableView.
Je voudrais pouvoir intercepter les appuis au clavier et agir en conséquence. J'ai donc écrit les méthodes keyDown pour les 2 vues.

Pour la NSTableView, pas de soucis, elle fonctionne correctement, mais pour ma vue perso, c'est également la NSTableView qui reçoit l'évènement ....

Comment la rendre réceptrice des appuis clavier ?

Réponses

  • 15:43 modifié #2
    Déjà  un petit truc: à  moins de vouloir écrire un jeu (ou tout autre type d'application qui fonctionne en plein écran), il ne faut pas surcharger keyDown, mais les sélecteurs appropriés, genre pour la flèche vers le bas -moveDown:, pour  -cancelOperation: pour escape,... (regarde dans la dock de nsresponder).

    Pour ta vue perso, est-ce que tu t'es bien assuré qu'elle renvoie YES à  - (BOOL)acceptsFirstResponder ?
  • BruBru Membre
    15:43 modifié #3
    Attention, dans le cas que UniX tente de décrire, il semble que les 2 views (la NSTableView ET sa custom-view) doivent recevoir des événements clavier en même temps (me corriger si c'est faux)...

    Hors, c'est impossible via le schéma standard. En effet, une seule et unique view est le first-responder (donc celle qui reçoit les événements clavier) à  la fois. Pour modifier cette état, il faut surcharger le responder supérieur, capturer l'évenement keyXXXX: qui t'intéresse.

    Enfin, en fonction de la touche, tu dispatches l'évenement à  la view que tu veux, qui va la traiter selon sa propre méthode keyXXXX:...

    .
  • UniXUniX Membre
    15:43 modifié #4
    Non, les 2 vues ne doivent pas recevoir l'évènement en même temps.

    J'ai fait un rapide petit essai, et il semble effectivement que l'oubli de  (BOOL)acceptsFirstResponder posait pb .... Il faut dire que je suis un peu largué avec ces histoires de responder, il va falloir que je m'y mette un peu ...

    Merci.
Connectez-vous ou Inscrivez-vous pour répondre.