1
votes

Obtenir une balise à partir de la reconnaissance de gestes Tap

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 !


0 commentaires

3 Réponses :


8
votes

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)
    }


0 commentaires

0
votes

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)
}


0 commentaires

0
votes

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)


0 commentaires