我是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
}
}
答案 0 :(得分:1)
删除委托方法上的for row
参数。只需发送单元格。
然后,您可以在indexPath
实现中的表格视图中找到单元格的handlePlayButton
。
func handlePlayButton(for cell: PlaylistCell) {
let indexPath = tableView.indexPath(for: cell)
}