Получение тега из Tap Gesture Recognizer

#ios #swift #uigesturerecognizer #uitapgesturerecognizer

#iOS #swift #uigesturerecognizer #uitapgesturerecognizer

Вопрос:

У меня есть массив UIImageViews, и им программно назначены средства распознавания жестов касания.

     myImages.forEach{ UIImageView in
        let tap = UITapGestureRecognizer(target: self, action: #selector(handleTap(gesture:)))
        tap.numberOfTapsRequired = 1
        tap.delegate = self
        view.addGestureRecognizer(tap)
        }
  

Каков наилучший способ назначить отправителя для каждого (или определить, какое изображение было задействовано другим способом)? Я безуспешно пытался

 var tag = sender.view!.tag
  

Спасибо!

Ответ №1:

здесь вам нужно выполнить два шага,

шаг 1

назначьте tags для imageview перед добавлением в ваш массив myImages.

шаг 2

получите тег из массива imageview и назначьте каждому вашему жесту

 myImages.forEach{  
    let tap = UITapGestureRecognizer(target: self, action: #selector(handleTap(_:)))
        tap.numberOfTapsRequired = 1
        tap.view?.tag =  $0.tag
        $0.isUserInteractionEnabled = true
        $0.addGestureRecognizer(tap)
    }
  

и обрабатываем функцию следующим образом

   @objc func handleTap(_ sender: UITapGestureRecognizer) {
     guard let getTag = sender.view?.tag else { return }
    print("getTag == (getTag)")
}
  

Ответ №2:

Вы можете использовать блок, предоставляемый инициализацией UITapGestureRecognizer, для доступа к вашим изображениям на месте.

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

Ответ №3:

Если вы хотите установить UITapGestureRecognizer в ячейке UICollectionView или UITableView, то для нас полезно приведенное ниже решение.

Шаг 1 Назначьте UITapGestureRecognizer конкретному textview или другому представлению в ячейке UICollectionView или 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)
  

Шаг 2 Получите тег из UITextView или другого представления в onclick action.

     @IBAction func onclickLink(_ sender: UITapGestureRecognizer) {
        print("indexPathRow == (sender.view?.tag ?? 0)")            
    }