J'ai un tableau d'UIImageViews et je leur ai assigné par programme des outils de reconnaissance de gestes de pression.
var tag = sender.view!.tag
Quelle est la meilleure façon d'attribuer un expéditeur à chacun (ou de déterminer quelle image a été tapée une autre chemin)? J'ai essayé sans succès
myImages.forEach{ UIImageView in let tap = UITapGestureRecognizer(target: self, action: #selector(handleTap(gesture:))) tap.numberOfTapsRequired = 1 tap.delegate = self view.addGestureRecognizer(tap) }
Merci !
3 Réponses :
Ici, vous devez suivre deux étapes,
étape 1
attribuez les balises
pour imageview avant de l'ajouter à votre tableau myImages.
étape 2
récupérez la balise du tableau imageview et attribuez-la à chaque geste
@objc func handleTap(_ sender: UITapGestureRecognizer) { guard let getTag = sender.view?.tag else { return } print("getTag == \(getTag)") }
et gérez la fonction comme
myImages.forEach{ let tap = UITapGestureRecognizer(target: self, action: #selector(handleTap(_:))) tap.numberOfTapsRequired = 1 tap.view?.tag = $0.tag $0.isUserInteractionEnabled = true $0.addGestureRecognizer(tap) }
Vous pouvez utiliser le bloc fourni par UITapGestureRecognizer init pour accéder à vos images en place.
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) }
Si vous souhaitez définir UITapGestureRecognizer dans la cellule UICollectionView ou UITableView , la solution ci-dessous est utile pour nous.
Étape 1 Attribuez le UITapGestureRecognizer à la vue de texte participante ou à une autre vue dans la cellule UICollectionView ou UITableView.
@IBAction func onclickLink(_ sender: UITapGestureRecognizer) { print("indexPathRow == \(sender.view?.tag ?? 0)") }
Étape 2 Récupérez la balise depuis UITextView ou une autre vue en un clic.
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)