web-dev-qa-db-fra.com

Swift3 iOS - Comment activer la fonction de déclenchement UITapGestureRecognizer

J'essaie d'ajouter un UITapGesture à un bouton UIB afin qu'il déclenche une fonction lorsqu'il est exploité. J'utilise Swift 3 et j'obtiens une erreur:

Arrêt de l'application en raison d'une exception non intercepté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!")
   }
}
45
Sebbe

Depuis votre code, vous utilisez Swift 3.0, alors changez la syntaxe de votre selector comme ceci

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

et votre fonction comme ça

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

Edit:

Pas idée que vous utilisiez le bouton avec le geste de tapotement, au lieu de cela, utilisez la méthode incorporée addTarget pour le bouton pas besoin de créer un geste de tapotement comme ça

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

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

Swift

Dans le cas où la func du sélecteur ressemble à ceci (remarque: il n'a pas de _):

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

Ensuite, le sélecteur ressemble à 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 utiliser le nom complet du premier paramètre.

9
skymook

Pour ajouter une reconnaissance de geste, vous devez en créer une indiquant la fonction à appeler:

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é, leurs méthodes natives "addTarget")

À des fins d’explication, imaginez que vous souhaitiez l’ajouter à UIView:

self.someView.addGestureRecognizer(tapGestureRecognizer)

Et n'oubliez pas que certains éléments ne sont pas "interactifs pour l'utilisateur" par défaut, vous devrez donc peut-être également modifier cette propriété:

self.someView.isUserInteractionEnabled = true

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

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