Swift Tableview搜索结果选定的单元格复选标记未持久

时间:2019-11-18 07:19:36

标签: ios swift uitableview

我正在使用Codable将数据从JSON加载到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)")
        }

1 个答案:

答案 0 :(得分:1)

您的逻辑不正确是因为您没有更新数据源 在搜索关闭时显示数据。 解决方案是,当您切换过滤后的数组时,那时请切换原始数据源数组,该数组也是您的membersData !! 必须有一个区分员工的关键字,因此当您在那时搜索某个员工时,请更新该员工的membersData Selected。

太多修改:p
    eq-//我假设emp_id是唯一键。成员数据也是可变的

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)")
    }