如何保存在tableView中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()

}

}

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

伪代码

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

最新更新