Как использовать UITapGestureRecognizer в UITableViewCell

ios

#1

Всем привет! Использую такую библиотеку для слайдшоу фотографий и открытия их в полный экран - https://github.com/zvonicek/ImageSlideshow

Проблема заключается в том, что я установил ImageSlideshow в UITableViewCell:

  import ImageSlideshow

  class ImagesTableViewCell: UITableViewCell {

      let imageSlides = ImageSlideshow()
Добавляю в него фотографии следующим методом в cellForRowAt indexPath:

cell.imageSlides.setImageInputs([
            ImageSource(image: self.mainImage!),
            ImageSource(image: self.firstImage!),
            ImageSource(image: self.secondImage!)
            ])

Фотографии показываются корректно и тд., но у данной библиотеки есть также возможность открытия каждой этой фотографии в полный экран. Делается это так (далее из документации с GitHub) :

override func viewDidLoad() {
  let gestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(ViewController.didTap))
  slideshow.addGestureRecognizer(gestureRecognizer)
}

func didTap() {
  slideshow.presentFullScreenController(from: self)
}

И вот я на этом запоролся - не понимаю как добавить UITapGestureRecognizer к этомуImageSlideshow(), если он находится в UITableViewCell, так как в методе slideshow.presentFullScreenController(from: self) просит UIViewController, когда у меня UITableViewCell. Подскажите, пожалуйста - как добавить UITapGestureRecognizer в UITableViewCell, чтобы slideshow.presentFullScreenController(from: self) срабатывал.


#2

попробуйте расширить класс UITableViewCell тем, что у вас в viewDidLoad()


#3

Вам на помощь прийдет делегат!

Если коротко:

  1. Создаёте протокол с функцией обработки нажатия (как у вас didTap)
  2. В вашем контролере реализуете этот протокол
  3. В вашей TableViewCell добавляете свойство, например, tapDelegate с опциональным типом вашего протокола
  4. В методе cellForRow at indexPath не забудьте сказать что у вашей ячейки tapDelegate = self
  5. нут теперь в ячейке смело настраивайте нажатие куда вам нужно, а как экшен к этом действию указывайте tapDelegate?.НазваниеФункцииИзВашегоПротокола