49 votes

Swift3 iOS - Comment faire une fonction de déclenchement de UITapGestureRecognizer ?

J'essaie d'ajouter un UITapGesture à un UIButton afin qu'il déclenche une fonction lorsqu'il est touché. J'utilise Swift 3 et obtient une erreur :

Arrêt de l'application en raison d'une exception non attrapée 'NSInvalidArgumentException', raison : '-[SwiftRunner.ViewController tapBlurButton] : sélecteur non reconnu envoyé à l'instance 0x149e07610'.

C'est à peu près ce que j'ai :

// Swift 3
import UIKit
class ViewController {

   @IBOutlet weak var qsBlurButton: UIButton!       

   override func viewDidLoad() {
      super.viewDidLoad()

      let tapGesture = UITapGestureRecognizer(target: self, action: Selector(("tapBlurButton")))
      qsBlurButton.addGestureRecognizer(tapGesture)
   }

   func tapBlurButton(sender: UITapGestureRecognizer) {
      print("Please Help!")
   }
}

106voto

Nirav D Points 53910

D'après votre code, vous utilisez swift 3.0, donc changez votre selector syntaxe comme ceci

let tapGesture = UITapGestureRecognizer(target: self, action: #selector(self.tapBlurButton(_:)))

et Votre fonction comme ceci

func tapBlurButton(_ sender: UITapGestureRecognizer) {
    print("Please Help!")
}

Editar:

Vous ne savez pas que vous utilisez un bouton avec un geste de tapotement, utilisez plutôt la méthode intégrée. addTarget pour le bouton, il n'est pas nécessaire de créer un geste de tapotement comme ceci

qsBlurButton.addTarget(self, action: #selector(self.tapBlurButton(_:)), forControlEvents: .TouchUpInside)

func tapBlurButton(_ sender: UIButton) {
    print("Please Help!")
}

9voto

skymook Points 786

Swift 3

Dans le cas où le func pour le sélecteur ressemble à ceci (note : il n'y a pas de _) :

func tapBlurButton(sender: UITapGestureRecognizer) {
  print("Please Help!")
}

Le sélecteur ressemble alors à ceci :

#selector(self.tapBlurButton(sender:))

Le code final pour le sélecteur est donc le suivant :

let tapGesture = UITapGestureRecognizer(target: self, action: #selector(self.tapBlurButton(sender:)))

Si vous ne spécifiez pas que le premier paramètre a _ vous devez alors utiliser le nom complet du premier paramètre.

6voto

Chiquis Points 5891

Pour ajouter un reconnaissant de gestes, vous devez en créer un en indiquant la fonction qu'il appellera :

let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.handleTapFrom(recognizer:)))

Ajoutez-le ensuite à l'élément dont vous avez besoin. (Vous utilisez un bouton, et comme d'autres l'ont expliqué, les boutons ont leur méthode native "addTarget").

À des fins d'explication, imaginez que vous voulez l'ajouter à un UIView :

self.someView.addGestureRecognizer(tapGestureRecognizer)

N'oubliez pas non plus que certains éléments sont "non interactifs pour l'utilisateur" par défaut et que vous devrez peut-être modifier cette propriété :

self.someView.isUserInteractionEnabled = true

En Swift 4 la fonction a besoin de la déclaration @objc :

@objc func handleTapFrom(recognizer : UITapGestureRecognizer)
{
    // Some code...
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X