ios - Swift Tableview 搜索结果选择的单元格复选标记不持久
问题描述
我正在JSON
使用 Codable 将我的数据加载到UITableView
. 在这里,Tableview 我实现了多个单元格选择复选标记选项。我将两个数组用于正常数据加载,另一个用于过滤数组数据。在这里,我isSelected
为复选标记添加了每一个选择。带有复选标记单元格选择的正常数据加载工作正常。但是,每当我尝试搜索并选择显示在搜索结果中的复选标记但清除搜索数据后,我无法在表格视图中看到搜索选择的复选标记。
我正在使用两个数组,一个用于normal
数据加载,另一个用于 tableviewsearch
数据。checkmark
搜索清楚后如何实现此可用性。
我的代码
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return searching ? filteredData.count : membersData.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell:listCustomCell = self.tableView.dequeueReusableCell(withIdentifier: cellReuseIdentifier) as! listCustomCell
let textForRow = searching ? filteredData[indexPath.row] : membersData[indexPath.row]
cell.empName.text = textForRow.firstname
cell.designationLabel.text = textForRow.designation
return cell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
self.tableView.deselectRow(at: indexPath, animated: true)
if searching == false {
membersData[indexPath.row].isSelected.toggle()
} else {
filteredData[indexPath.row].isSelected.toggle()
}
tableView.reloadRows(at: [indexPath], with: .none)
let selectedAreas = membersData.filter{$0.isSelected}
let selectedfilterAreas = filteredData.filter{$0.isSelected}
print("\(selectedAreas)")
print("\(selectedfilterAreas)")
}
解决方案
您的逻辑不正确,因为您没有更新在搜索关闭时显示数据的数据源。解决方案是当您切换过滤后的数组时,请同时切换作为您的 membersData 的原始数据源数组!!。必须有一个区分员工的关键,因此当您在搜索时选择员工时,更新该员工的 membersData isSelected。
编辑太多:p
eq-//我假设 emp_id 是唯一键。membersData 也是可变的
CODE -
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
self.tableView.deselectRow(at: indexPath, animated: true)
if searching == false {
membersData[indexPath.row].isSelected.toggle()
} else {
filteredData[indexPath.row].isSelected.toggle()
let empId = filterdData[indexPath.row].emp_id
for (index,obj) in membersData.enumerated() {
membersData[index].isSelected = obj.emp_id == empId ? filteredData[indexPath.row].isSelected : obj.isSelected
}
tableView.reloadRows(at: [indexPath], with: .none)
let selectedAreas = membersData.filter{$0.isSelected}
let selectedfilterAreas = filteredData.filter{$0.isSelected}
print("\(selectedAreas)")
print("\(selectedfilterAreas)")
}
推荐阅读
- html - 修改表单内的 Angular Material 表后如何使我的 ngForm 变脏
- python - 如何从命令行运行不同的python函数
- c++ - Armadillo equivalent to A(find(A<0)) = 0
- oop - (巨型)应用程序真的只包含一个 Timer 对象吗?
- javascript - 检查 null 的条件语句不起作用
- c++ - Reversing a text read from console
- lumen - 接受对象的自定义过滤器 - lighthouse-php
- python - 在 NumPy 中将具有不同维度的“N”个 2D 数组连接到一个 3D 数组中
- arrays - 如何从我在 MongoDB 中的集合中的三个现有字段创建数组或嵌入文档
- java - 插入数组时 H2 数据库中的 SQL 语法错误