嗨,我正在尝试在选中复选框时删除单元格,但该功能会一直删除索引 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”
您当前的问题是这一行:
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)
| 归档时间: |
|
| 查看次数: |
2070 次 |
| 最近记录: |