Tengo una serie de UIImageViews y les he asignado reconocedores de gestos de toque mediante programación.
myImages.forEach{ UIImageView in let tap = UITapGestureRecognizer(target: self, action: #selector(handleTap(gesture:))) tap.numberOfTapsRequired = 1 tap.delegate = self view.addGestureRecognizer(tap) }¿Cuál es la mejor manera de asignar un remitente a cada uno (o determinar qué imagen se tocó de otra manera)? he intentado sin exito
var tag = sender.view!.tag¡Gracias!
aquí tienes que seguir dos pasos,
paso 1
asigne las tags para la vista de imagen antes de agregarlas a su matriz myImages.
paso 2
obtenga la etiqueta de la matriz imageview y asígnela a cada uno de sus gestos
myImages.forEach{ let tap = UITapGestureRecognizer(target: self, action: #selector(handleTap(_:))) tap.numberOfTapsRequired = 1 tap.view?.tag = $0.tag $0.isUserInteractionEnabled = true $0.addGestureRecognizer(tap) }y manejar la función como
@objc func handleTap(_ sender: UITapGestureRecognizer) { guard let getTag = sender.view?.tag else { return } print("getTag == \(getTag)") }Si desea configurar UITapGestureRecognizer en la celda UICollectionView o UITableView , la siguiente solución es útil para nosotros.
Paso 1 Asigne UITapGestureRecognizer a la vista de texto particular u otra vista en la celda UICollectionView o UITableView.
cell.textView?.delegate = self cell.textView?.isEditable = false cell.textView?.isSelectable = true let tap = UITapGestureRecognizer(target: self, action:#selector(self.onclickLink(_:))) cell.textView?.tag = indexPath.row tap.numberOfTapsRequired = 1 cell.textView?.addGestureRecognizer(tap)Paso 2 Obtenga la etiqueta de UITextView u otra Vista en acción onclick.
@IBAction func onclickLink(_ sender: UITapGestureRecognizer) { print("indexPathRow == \(sender.view?.tag ?? 0)") }Puede usar el bloque proporcionado por UITapGestureRecognizer init para acceder a sus imágenes en su lugar.
myImages.forEach { image in let tap = UITapGestureRecognizer(block: {[weak self] _ in //Do your stuff here //print("Image Tapped:", image.debugDescription) }, delegate: self) tap.numberOfTapsRequired = 1 image.addGestureRecognizer(tap) }