如何在分段控制器内的 tableView 中保存选定行的状态?

How to save state of selected rows in tableView inside segmentedController?

我有一个有两个段的分段控制器。每个段都有一个公共的 tableView。 切换段时如何保存选定的单元格?您能否提供一些实现方法?

切换段时我只能保存一个选定的行。

视图模型

var years: [String] = []
var genres: [String] = []

var selectedGenr: Int?
var selectedYear: Int?

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    
    if segmentedControl.selectedSegmentIndex == 0 {
        if viewModel.selectedGenr == indexPath.row {
            viewModel.selectedGenr = nil
        } else {
            viewModel.selectedGenr = indexPath.row
        }
    } else {
        if viewModel.selectedYear == indexPath.row {
            viewModel.selectedYear = nil
        } else {
            viewModel.selectedYear = indexPath.row
        }
    }
    tableView.reloadData()
    
}

}

您可以将选择存储为视图模型中的列表 然后在 table 视图中

伪代码

if segmentedControl.selectedSegmentIndex == 0 {
if viewModel.selectedYears.contains(indexPath.row) {
viewModel.selectedYears.remove(indexPath.row)
}
else {
viewModel.selectedYears.append(indexPath.row)
}
}
if segmentedControl.selectedSegmentIndex == 0 {
            if self.selectedIndexesForGenres.contains(indexPath.row) {
                if let index = self.selectedIndexesForGenres.firstIndex(of: indexPath.row) {
                                self.selectedIndexesForGenres.remove(at: index)
                            }
                        } else {
                            self.selectedIndexesForGenres.append(indexPath.row)
                        }
            }
        else {
            if self.selectedIndexesForYears.contains(indexPath.row) {
                if let index = self.selectedIndexesForYears.firstIndex(of: indexPath.row) {
                                self.selectedIndexesForYears.remove(at: index)
                            }
                        } else {
                            self.selectedIndexesForYears.append(indexPath.row)
                        }
            }
        self.tableView.reloadData()
            }