Как получить indexPath при переходе по segue от кнопки внутри UITableViewCell

indexpath
uitableviewcell
segue

#1

Всем привет!
Пишу своё первое боевое приложение, столкнулся со следующей проблемой.
Имеется UITableViewController с кастомными ячейками. Внутри ячейки есть UIButton на которую я повесил Show segue для перехода на новую вьюху.
Нужно получить indexPath ячейки в которой была нажата кнопка для передачи данных через segue на новую вьюху.
Способ как в курсах let indexPath = tableView.indexPathForSelectedRow не работает, так как клик идёт не по самой ячейки, а по кнопке в ней.
Подскажите как решить эту задачу?
Заранее благодарен за помощь.


#2

Нашёл решение сам, мб кому из новичков ещё пригодится. Или более опытные товарищи дадут оценку.
В методе tableView cellForRowAt который добавил значение indexPath.row в поле tag моей кнопки:

cell.myButton.tag = indexPath.row

И затем в методе prepare for segue смог уже получить свой заветный indexPath.row:

let indexPathRow = (sender as! UIButton).tag

#3

Я видел другое решение. Из ячейки протягивается action в ViewController и пишется такой код:

let point = sender.location(in: self.tableView)
let path = self.tableView.indexPathForRow(at: point)!
let card = self.dataSource[path.row] as! YourModel
let cell = self.tableView.cellForRow(at: path) as! YourCell

#4

А что будет если понадобиться еще и секцию передать?


#5

Как вариант можно к кнопке добавить свои свойства и писать данные туда.


#6

На stack overflow я видел много вариантов решения подобных задач, но пока мой уровень в iOS разработке не даёт мне понять, как применить их в моём случае. С вашим решением такая же беда.


#7

я предположу что в сториборде делаешь UI. Поэтому открываешь слева ячейку, справа контроллер. И тянешь туда от кнопки action.
Ну а дальше код по распознаванию indexPath. Все просто.


#8

Если добавлять свои свойства это уже будет кастомная кнопка. И все равно, лучше в ней не хранить индексы. Хотя если задача мелкая и вопрос решен - пользуйся, никто ж не требует все откатить и сделать по-другому.