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