Swift3 iOS-Cómo hacer que UITapGestureRecognizer active la función
tap gesture recognizer swift 4 (3)
Desde su código está utilizando swift 3.0, así que cambie la sintaxis de su
selector
esta manera
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(self.tapBlurButton(_:)))
y tu función como esta
func tapBlurButton(_ sender: UITapGestureRecognizer) {
print("Please Help!")
}
Editar:
No
addTarget
idea de que está usando un botón con un gesto de toque, en lugar de usar el método incorporado
addTarget
para el botón, no es necesario crear un gesto de toque como este
qsBlurButton.addTarget(self, action: #selector(self.tapBlurButton(_:)), forControlEvents: .TouchUpInside)
func tapBlurButton(_ sender: UIButton) {
print("Please Help!")
}
Estoy tratando de agregar un
UITapGesture
a un UIButton para que active una función cuando se toca.
Estoy usando
Swift 3
y obtengo algún error:
Aplicación finalizada debido a la excepción no detectada ''NSInvalidArgumentException'', razón: ''- [SwiftRunner.ViewController tapBlurButton]: selector no reconocido enviado a la instancia 0x149e07610''
Esto es más o menos lo que tengo:
// 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!")
}
}
Para agregar un reconocedor de gestos, debe crear uno que indique a qué función llamará:
let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.handleTapFrom(recognizer:)))
Luego agréguelo al elemento que necesita. (Está utilizando un botón y, como otros han explicado, los botones tienen sus métodos nativos ''addTarget'')
Para fines de explicación, imagine que desea agregarlo a una UIView:
self.someView.addGestureRecognizer(tapGestureRecognizer)
Y no olvide que algunos elementos "no son interactivos para el usuario" de manera predeterminada, por lo que es posible que también deba cambiar esa propiedad:
self.someView.isUserInteractionEnabled = true
En Swift 4, la función necesita la declaración @objc:
@objc func handleTapFrom(recognizer : UITapGestureRecognizer)
{
// Some code...
}
Swift 3
En el caso en que la
func
para el selector se vea así (nota: no tiene un _):
func tapBlurButton(sender: UITapGestureRecognizer) {
print("Please Help!")
}
Entonces el selector se ve así:
#selector(self.tapBlurButton(sender:))
Entonces el código final para el selector es este:
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(self.tapBlurButton(sender:)))
Si no especifica que el primer parámetro tiene
_
, entonces necesita usar el nombre completo del primer parámetro.