Передайте indexPath выбранной строки, используя протокол - PullRequest
0 голосов
/ 05 апреля 2019

Я новичок в MVC и протоколах, но я пытаюсь адаптироваться к MVC, используя протоколы для передачи данных.У меня есть кнопка в моей ячейке табличного представления, и я пытаюсь получить indexPath выбранной строки, чтобы выполнить какое-либо действие при нажатии этой кнопки.Я создал протокол и установил делегата на правильный VC.моя проблема в том, как получить выбранный indexPath через делегата.Простите за мое невежество

Таблица Ячейка

class PlaylistCell: UITableViewCell {

 var playButtonTappedDelegate: PlaylistCelldelegate!

@IBAction func PlayButton(_ sender: Any) {
    // Dont know how to get this Int, when cell is tapped
    playButtonTappedDelegate.handlePlayButton(for: self, for: <#Int#>)
}

}

Протокол

protocol PlaylistCelldelegate {
func handlePlayButton( for cell: PlaylistCell, for row: Int)

}

Я согласился с делегатом на этом ВК

  class PlaylistVC: UIViewController, PlaylistCelldelegate {

    func handlePlayButton(for cell: PlaylistCell, for row: Int) {
        print("row\(row)")
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "PlaylistCell", for: indexPath) as! PlaylistCell
        cell.playButtonTappedDelegate = self

        return cell
    }    
}

1 Ответ

1 голос
/ 05 апреля 2019

Удалите параметр for row в вашем методе делегата.Просто отправьте ячейку.

Тогда вы сможете найти ячейку indexPath из табличного представления в вашей реализации handlePlayButton.

func handlePlayButton(for cell: PlaylistCell) {
    let indexPath = tableView.indexPath(for: cell)
}
...