我有tableView
我需要选择 3 个单元格,即使我滚动它也会保持原样。我可以选择 1、2 或 3 个单元格,但不能选择 4 个或更多。当我选择 4 个单元格时,应该什么都不会发生。如果有3个选定的单元格,并且我单击其中一个,则应取消选择我选择的单元格。
如果您有模型,请使用该模型。仅修改视图不是永久性的。
在模型中添加属性
var isSelected = false
cellForRowAt
根据模型设置isSelected
(假设items
是数据源数组)
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
。