首页 > 解决方案 > TableView didSelect 方法和切换

问题描述

我有tableView我需要选择 3 个单元格,即使我滚动它也会保持不变。我可以选择 1、2 或 3 个单元格,但不能选择 4 个或更多。当我选择 4 个单元格时,什么都不会发生。如果有 3 个选定的单元格并且我单击其中一个单元格,则应取消选择我选择的单元格。

标签: toggle

解决方案


如果您有模型,请使用该模型。仅修改视图不是持久的。

在模型中添加一个属性

var isSelected = false

根据模型cellForRowAt设置(假设是数据源数组)isSelecteditems

let item = items[indexPath.row]
cell.isSelected = item.isSelected

实现willSelectRowAt通过筛选和计算所选项目来处理 3 项目限制。如果方法返回nil,则无法选择该行。

func tableView(_ tableView: UITableView, willSelectRowAt indexPath: IndexPath) -> IndexPath? {
    return items[indexPath.row].isSelected || items.filter{$0.isSelected}.count < 3 ? indexPath : nil
}

didSelect切换isSelected并重新加载行

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    items[indexPath.row].isSelected.toggle()
    tableView.reloadRows(at: [indexPath], with: .automatic)
}

indexPathsForSelectedRows并且allowsMultipleSelection不需要分别,后者必须true永久设置。


推荐阅读