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!")
}
}
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!")
}
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.
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...
}