Swift et évènements clavier

Freitag

Membre confirmé
8 Janvier 2010
46
1
64
Bonjour à tous,

Débutant avec Swift, je n'arrive pas à faire en sorte que la fenêtre principale de mon appli intercepte les évènements clavier.
J'ai cherché partout un exemple mais rien à faire, je ne comprends pas où placer la fonction "acceptsFirstRespondeur()". Je n'ai pas de problème avec les évènements souris, seulement avec le clavier.

Mon appli fonctionne bien en Objective-C mais je cale pour faire la même chose en Swift.
Je suis parti d'un nouveau projet, storyboard actif. J'ai donc les fichiers Main.storyboard, AppDelegate.swift et ViewController.swift.

Ça fait deux semaines que je coince et je déprime. :( Quelqu'un pour me sortir du trou ? Un grand merci par avance.
 
Bonjour,

Bloc de code:
import Cocoa

class aView : NSView
{
    override var acceptsFirstResponder : Bool
    {
        return true
    }

// or

    func acceptsFirstResponder() -> Bool
    {
        return true;
    }

    override func keyDown(evt : NSEvent!)
    {
        if !evt.ARepeat {
            self.dispatchEvent(evt)
        }
    }

    override func keyUp(evt : NSEvent!)
    {
        if !evt.ARepeat {
            self.dispatchEvent(evt)
        }
    }

    func dispatchEvent(evt : NSEvent!)
    {
        ...

        NSNotificationCenter.defaultCenter().postNotificationName(
              "aView.Event.to.controller", object: self, userInfo: infodict
       )
    }
    ...
}
 
Dernière édition:
Merci beaucoup !
J'essaye de mettre ça en œuvre. Venant de REALbasic (Xojo) j'ai encore beaucoup de mal...
 
Merci encore Mboum, j'ai compris et je suis décoincé.
Xcode (6.2) dit seulement que le "!" après NSEvent doit être retiré.

Je partais d'un simple fichier Swift alors qu'il fallait créer un fichier Class Cocoa pour la View.
 
Bonjour,

de rien, cocoa ; qu'il soit touch, écrit en obj-c ou en swift ; est construit sur un système de délégation et dans la partie UI des virtuelles qui sont en faite de simples callbacks ; mais il faut bien lire la doc car tout n'est pas consistant, certaines demandent un appel à la méthode super ce qui en c++ donnerait:

Bloc de code:
class A
{
   virtual void a_func(bool a) { ... }
}

class B : public A {

   virtual void a_func(bool a) override final
   {
      // do stuff
      A::a_func(a);

      //  ou
       A::a_func(a);
      //  puis do stuff
   
      // ou le faite d'appeler super est une cata,
      // ce n'est  pas toujours très propre et logique concernant ce modele  
   }
}

ce qui peut paraitre choquant.
 
Dernière édition: