UPDATE: получение индексной ячейки ячейки, содержащей кнопку (оба раздела и строка):
Использование позиции кнопки
Внутри вашего метода buttonTapped
вы можете захватить кнопки, преобразуйте его в координату в таблицеView, затем получите indexPath строки в этой координате.
func buttonTapped(_ sender:AnyObject) {
let buttonPosition:CGPoint = sender.convert(CGPoint.zero, to:self.tableView)
let indexPath = self.tableView.indexPathForRow(at: buttonPosition)
}
ПРИМЕЧАНИЕ. Иногда вы можете запускать ребро при использовании функции view.convert(CGPointZero, to:self.tableView)
приводит к обнаружению nil
для строки в точке, даже если там есть таблица tableView. Чтобы исправить это, попробуйте передать реальную координату, которая слегка смещена от начала координат, например:
let buttonPosition:CGPoint = sender.convert(CGPoint.init(x: 5.0, y: 5.0), to:self.tableView)
Предыдущий ответ: использование свойства Tag (только возвращает строку)
Вместо поднимаясь в деревья супервизора, чтобы захватить указатель на ячейку, которая содержит UIButton, существует более безопасная, более повторяемая техника, использующая свойство button.tag, упомянутое выше в Антонио, описанное в этом ответе , и показано ниже:
В cellForRowAtIndexPath:
вы установили свойство тега:
button.tag = indexPath.row
button.addTarget(self, action: "buttonClicked:", forControlEvents: UIControlEvents.TouchUpInside)
Затем в функции buttonClicked:
вы ссылаетесь на этот тег, чтобы захватить строку indexPath, где кнопка находится:
func buttonClicked(sender:UIButton) {
let buttonRow = sender.tag
}
Я предпочитаю этот метод, так как я обнаружил, что поворот в деревьях супервизора может быть рискованным способом разработки приложения. Кроме того, для object-C я использовал эту технику в прошлом и был доволен результатом.