使用协议传递所选行的 indexPath

Pass indexPath of selected row using Protocol

我是 MVC 和协议的新手,但我正在努力适应 MVC 使用协议来传递数据。我的 tableview 单元格上有一个按钮,我试图获取所选行的 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)

}

我同意委托人的意见 VC

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

删除委托方法中的 for row 参数。只需发送手机即可。

然后您可以在 handlePlayButton 实现的 table 视图中找到单元格的 indexPath

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