我正在JSON
使用Codable将数据加载到中UITableView
。在这里,Tableview I实现了多个单元格选择复选标记选项。我将两个数组用于常规数据加载,另一个用于过滤器数组数据。在这里,我isSelected
为检查标记持久性追加的每个选择。带有选中标记单元格选择的正常数据加载正常。但是,每当我尝试搜索并选择显示在搜索结果中的选中标记,但清除搜索数据后,我都无法在表视图中看到搜索选中的选中标记。
我正在使用两个数组一个用于normal
数据加载,另一个用于表视图search
数据。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 !!。必须有一个区分雇员的密钥,因此,当您在那时搜索某个雇员时,更新该雇员的memberData 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)")
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句