Иногда кнопка может находиться внутри другого представления UITableViewCell. В этом случае superiew.superview не может передать объект ячейки, и поэтому indexPath будет равен нулю.
В этом случае мы должны продолжать поиск супервизора, пока не получим объект ячейки.
Функция для получения объекта ячейки с помощью супервизора
func getCellForView(view:UIView) -> UITableViewCell?
{
var superView = view.superview
while superView != nil
{
if superView is UITableViewCell
{
return superView as? UITableViewCell
}
else
{
superView = superView?.superview
}
}
return nil
}
Теперь мы можем получить indexPath при нажатии кнопки, как показано ниже
@IBAction func tapButton(_ sender: UIButton)
{
let cell = getCellForView(view: sender)
let indexPath = myTabelView.indexPath(for: cell)
}