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)