toggle - TableView didSelect 方法和切换
问题描述
我有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
永久设置。
推荐阅读
- python - 使用 Pandas 数据框查找不同小数位的值
- c# - 如何在我想要的 ASP.NET Core 2.0 中获取 DbContext 的实例?
- ruby - 为在 AWS Lambda 中运行的 Webscraping 优化 Ruby 代码
- angularjs - 在指令 angularJS 中调用自定义服务
- c++ - 这个表达式是左值还是右值?
- android - 反应本机提示用户从 App Store 下载应用程序
- android - 如何通过 AlarmManager 正确使用警报
- unity3d - Unity 测试广告突然停止在构建中运行,但在编辑器中运行没有任何错误
- javascript - 如何为表格中的每个 X 元素创建一个表格?
- elastic-stack - 为什么弹性堆栈 Helm 图表的 logstash pod 不断失败?