Pasar el parámetro con UITapGestureRecognizer

¿Hay alguna manera de que pueda pasar parameters con UITapGestureRecognizer? He visto esta respuesta para el objective-c pero no pude encontrar una respuesta para swift

test.userInteractionEnabled = true let tapRecognizer = UITapGestureRecognizer(target: self, action: Selector("imageTapped4:")) // Something like text.myPatwigter test.addGestureRecognizer(tapRecognizer) 

Y luego recibir myParameter bajo func imageTapped4 () {}

Un enfoque sería subclass UITapGestureRecognizer y luego establecer una propiedad, he publicado un ejemplo a continuación. También podría hacer alguna comprobación sobre el remitente y comprobar si es igual a alguna label, class, cadena, etc.

 class ViewController: UIViewController { @IBOutlet weak var label1: UILabel! @IBOutlet weak var image: UIImageView! override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. image.userInteractionEnabled = true; let tappy = MyTapGesture(target: self, action: #selector(self.tapped(_:))) image.addGestureRecognizer(tappy) tappy.title = "val" } func tapped(sender : MyTapGesture) { print(sender.title) label1.text = sender.title } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } } class MyTapGesture: UITapGestureRecognizer { var title = String() } 

Hay muchos ejemplos en SO, eche un vistazo, buena suerte.

La mejor manera es determinar el parámetro cuando se imageTapped64 la function imageTapped64 . Puede get parameters a través de la vista (eche un vistazo a la respuesta de @Developer Sheldon) o de muchas otras maneras.

El post que pasa en los gestos de pulsación es similar a la location del gesto de toque detectado en una vista.

Suponga que hemos agregado un gesto de toque en la vista auto del controller de vista.

  override func viewDidLoad() { super.viewDidLoad() let tapGesture = UITapGestureRecognizer(target: self, action: #selector(self.printGesPostion)) self.view.addGestureRecognizer(tapGesture) // Do any additional setup after loading the view, typically from a nib. } 

Podemos implementar el método printGesPosition como

  func printGesPostion(ges:UITapGestureRecognizer) { print(ges.locationInView(self.view)) let subView = self.view.hitTest(ges.locationInView(self.view), withEvent: nil) if subView?.isKindOfClass(UILabel) == true { print( (subView as! UILabel).text! ) } } 

En este caso, el método está detectando la position del gesto del grifo, si está sucediendo en un UILabel , se imprimirá la label.text

No olvide configurar su label.userInteraction = true , ya sea en ViewDidLoad o simplemente en el guión gráfico.