web-dev-qa-db-fra.com

Swift détecte le toucher n'importe où sur l'écran

Je sais que vous pouvez détecter des touches à l'aide de touchesBegan, touchesEnded, etc., tout cela fonctionne. La seule chose à faire est qu'ils détectent uniquement les contacts sur la vue elle-même, et non sur quoi que ce soit au-dessus de cette vue comme un champ de texte.

Mon objectif est de créer un délai d'attente après une certaine période d'inactivité. Le délai d'attente sera réinitialisé si l'écran est touché, ce qui signifie que quelqu'un utilise encore l'application. Cela fonctionne jusqu'à présent, tant qu'ils ne tapent sur aucun contrôle (comme une étiquette, un bouton, une vue de texte, etc.).

Je pourrais également réinitialiser le délai d'attente lorsque des contrôles sont activés, mais cela nécessiterait beaucoup plus de cas (différents types de contrôles sur différents contrôleurs de vue).

Je suis à la recherche d'une méthode de détection de frappe à l'écran. Des idées?

13
Luke Patterson

Vous pouvez ajouter ceci à votre AppDelegate:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        let tapGesture = UITapGestureRecognizer(target: self, action: nil)
        tapGesture.delegate = self
        window?.addGestureRecognizer(tapGesture)

        return true
}

func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool {
        // User tapped on screen, do whatever you want to do here.

        return false
}

Et rendez également votre AppDelegate conforme au protocole UIGestureRecognizerDelegate.

18
Nati

Glissez et déposez UITapGestureRecognizer, assurez-vous que toute la vue est sélectionnée. Il sera ajouté sur la première ligne de votre contrôleur de vue, puis créez une variable Action

Si vous voulez vous assurer qu'aucun des boutons n'est enfoncé, une fois la période d'inactivité terminée, ajoutez-lui une autre vue (transparente ou un peu plus sombre) et connectez-y la UITapGestureRecognizer. Une fois tapé, relâchez la vue ajoutée et reprenez l'activité.

0
Idan