Я добавляю представление с набором изображений (socialView) в ячейку представления коллекции (также с другими представлениями), для которых необходимо выполнить общий щелчок. Этот клик не должен совпадать с кликом в ячейке представления коллекции.
Я думаю о добавлении UITapGestureRecognizer для socialView каждый раз в методе делегирования collectionView cellForItemAt. Но я хочу знать, это правильный путь? Более того, я хочу получить indexPath / позицию, по которой вызывается socialView.
let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.socialViewTapped))
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "bidderAuctionCell", for: indexPath) as! BidderAuctionViewCell
cell.socialView.addGestureRecognizer(tapGestureRecognizer)
}
@objc func socialViewTapped() {
// Which item cell's socialview is clicked
}
UPDATE
Я сделал согласно приведенным ниже предложениям, но я не могу получить, где я должен добавить UITapGestureRecognizer в пользовательской ячейке. Ниже приведена пользовательская ячейка, которую я создал.
class CustomViewCell: UICollectionViewCell {
var index : IndexPath!
var socialViewDelegate : SocialViewDelegate!
@IBOutlet weak var socialView: UIView!
override init(frame: CGRect) {
super.init(frame:frame)
let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.viewTapped))
socialView.addGestureRecognizer(tapGestureRecognizer)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder:aDecoder)
}
@objc func viewTapped(){
socialViewDelegate.socialViewTapped(at: index)
}
}
Функция init не вызывается. Я также пытался вставить требуемый init, но там социальное представление не инициализировано. Так разбился
ФИНАЛЬНЫЙ ОТВЕТ
класс CustomViewCell: UICollectionViewCell {
var index : IndexPath!
var socialViewDelegate : SocialViewDelegate!
@IBOutlet weak var socialView: UIView!
override func awakeFromNib() {
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(handleTap))
socialView.isUserInteractionEnabled = true
socialView.addGestureRecognizer(tapGesture)
}
@objc func handleTap(){
socialViewDelegate.socialViewTapped(at: index)
}
}
protocol SocialViewDelegate {
func socialViewTapped(at index: IndexPath)
}