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