Swift-добавить распознаватель жестов к объекту в ячейке таблицы

Я пытаюсь добавить распознаватель жестов к объекту (в частности, изображению) в ячейке представления таблицы. Теперь я знаком с распознавателями жестов, но немного смущен тем, как это настроить. Фактическая ячейка таблицы не имеет метода viewDidLoad, поэтому я не думаю, что могу объявить распознаватель жестов там.

этот вопрос (UIGestureRecognizer и проблема инструменту UITableViewCell) кажется связанным, однако ответ находится в объективном C, и к сожалению, я свободно владею только swift.

Если кто-нибудь может помочь мне в том, как я буду добавлять распознаватель жестов к объекту в ячейке таблицы (а не весь tableview) или даже, возможно, помочь мне в переводе ответа из приведенной выше ссылки на swift, я был бы благодарен

3 ответов


вот быстрый Swift-перевод решения связанного сообщения, добавив распознаватель жестов салфетки в UITableView, а затем определив, в какой ячейке произошло салфетки:

class MyViewController: UITableViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        var recognizer = UISwipeGestureRecognizer(target: self, action: "didSwipe")
        self.tableView.addGestureRecognizer(recognizer)
    }

    func didSwipe(recognizer: UIGestureRecognizer) {
        if recognizer.state == UIGestureRecognizerState.Ended {
            let swipeLocation = recognizer.locationInView(self.tableView)
            if let swipedIndexPath = tableView.indexPathForRowAtPoint(swipeLocation) {
                if let swipedCell = self.tableView.cellForRowAtIndexPath(swipedIndexPath) {
                    // Swipe happened. Do stuff!
                }
            }
        }
    }

}

здесь вы идете. Swift версия решения, которое вы упомянули в своем вопросе

" вместо того, чтобы добавлять распознаватель жестов непосредственно в ячейку, вы можете добавить его в tableview в viewDidLoad.

в методе didSwipe вы можете определить затронутые IndexPath и ячейку следующим образом:"

func didSwipe(gestureRecognizer:UIGestureRecognizer) {
    if gestureRecognizer.state == UIGestureRecognizerState.Ended {
        let swipeLocation = gestureRecognizer.locationInView(self.tableView)
          if let swipedIndexPath = self.tableView.indexPathForRowAtPoint(swipeLocation){
            if let swipedCell = self.tableView.cellForRowAtIndexPath(swipedIndexPath!){


      }
    }
  }
}

обновление для Swift 4:

let swipeGestueRecognizer = UISwipeGestureRecognizer(target: self, action: #selector(didRecognizeSwipeGestue(_:)))
self.view.addGestureRecognizer(swipeGestueRecognizer)

и селектор:

@objc func didRecognizeSwipeGestue(_ sender: UISwipeGestureRecognizer) {

    if sender.state == UIGestureRecognizerState.ended {
        let location = sender.location(in: self.tableView)
        if let indexPath = tableView.indexPathForRow(at: location) {
            if let cell = self.tableView.cellForRow(at: indexPath) {
                // todo
            }
        }
    }
}