我有一个非常讨厌的问题。
我有一个包含或多或少50个单元格的tableView,显示了一些选项,我可以选择我想要的选项。我在Apple的文档中读到,默认情况下,单元格在不显示时会被重用。有了这个,如果我选择第一个单元格,就会标记每6个单元格1,也就是说,如果我选择前6个单元格,则会标记表格中的所有单元格!
我的表格视图允许多项选择。选择是这样的:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.cellForRow(at: indexPath)?.accessoryType = UITableViewCellAccessoryType.checkmark
}
我该如何解决这个问题?我知道你有这样一个" prepareForReuse()"对于子类,那会是解决方案吗?如果是这样,你能举例说明你会怎么做吗?
答案 0 :(得分:3)
这里有代码可以帮助你
var arr_selectedindePath = NSMutableArray()
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
{
if arr_selectedindePath .contains(indexPath) {
arr_selectedindePath .remove(indexPath)
tableView.cellForRow(at: indexPath)?.accessoryType = UITableViewCellAccessoryType.none
}
else
{
arr_selectedindePath .add(indexPath)
tableView.cellForRow(at: indexPath)?.accessoryType = UITableViewCellAccessoryType.checkmark
}
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
let cell: UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "cell")!
if arr_selectedindePath .contains(indexPath) {
cell.accessoryType = .checkmark
}
else
{
cell.accessoryType = .none
}
}
答案 1 :(得分:2)
您需要相应地更新数据模型,以便在调用cellForRowAtIndexPath时显示包含更新内容的单元格。
如果不使用数据模型,则需要将indexPath存储在可变数组中,并检查当前indexPath是否已标记。
希望这有帮助。
答案 2 :(得分:-1)
在自定义单元格中
1 。创建代理
protocol CellDelegate {
func didTapOnButton(_ cell:Cell)
}
<强> 2 即可。 声明代理
var delegate:CellDelegate?
3.Override this method
override func prepareForReuse() {
super.prepareForReuse()
self.delegate = nil
}
@IBAction func buttonTapped()
{
self.delegate!.didTapOnButton(self)
}
在您的tableview控制器中
1.实施委托方法
2.Inside cellForRowAtIndexPath将标签值分配给cell.button
3.实施此方法
func didTapOnButton(_ cell: Cell) {
print("off button clicked at index \(cell.button.tag)")
}