在单元格 CustomTableViewCell 内按下按钮时删除单元格

CFR*_*FRJ 2 uitableview swift

嗨,我正在尝试在选中复选框时删除单元格,但该功能会一直删除索引 0 处的单元格而不是选定的单元格索引

设置带有标签的单元格

let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! TableViewCell
    let task = tasks[indexPath.row]
    cell.delegate = self
    cell.tag = indexPath.row


    print("The tag is \(cell.tag)")
Run Code Online (Sandbox Code Playgroud)

自定义TableViewCell

protocol TableViewCellDelegate {
func RadioTapped(_ tag: Int)


}

class TableViewCell: UITableViewCell  {

var delegate: TableViewCellDelegate?

@IBOutlet var radioButton: BEMCheckBox!
@IBOutlet var taskText: UILabel!
@IBAction func radioTapped(_ sender: UIView){
    delegate?.RadioTapped(sender.tag)
}
Run Code Online (Sandbox Code Playgroud)

点击单选按钮时调用的函数

func RadioTapped(_ tag: Int) {
    print("Radio Tapped at \(tag)")
}
Run Code Online (Sandbox Code Playgroud)

RadioTapped 总是打印“Radio tapped at 0”

rma*_*ddy 7

您当前的问题是这一行:

delegate?.RadioTapped(sender.tag)
Run Code Online (Sandbox Code Playgroud)

它应该是:

delegate?.RadioTapped(tag)
Run Code Online (Sandbox Code Playgroud)

因为它是设置单元格的标签。

但是不要为此使用标签。更新单元格的委托方法以将自身作为参数传递。然后委托可以从表格视图中确定单元格的 indexPath。

更新的协议:

protocol TableViewCellDelegate {
    func radioTapped(_ cell: TableViewCell)
}
Run Code Online (Sandbox Code Playgroud)

更新的单元格点击处理程序:

@IBAction func radioTapped(_ sender: UIView){
    delegate?.radioTapped(self)
}
Run Code Online (Sandbox Code Playgroud)

更新 cellForRowAt:

let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! TableViewCell
let task = tasks[indexPath.row]
cell.delegate = self
Run Code Online (Sandbox Code Playgroud)

更新表视图中的委托方法:

func radioTapped(_ cell: TableViewCell) {
    if let indexPath = tableView.indexPath(for: cell) {
        print("Radio Tapped at \(indexPath)")
    }
}
Run Code Online (Sandbox Code Playgroud)