如何在分段控制器内的 tableView 中保存选定行的状态?
Posted
技术标签:
【中文标题】如何在分段控制器内的 tableView 中保存选定行的状态?【英文标题】:How to save state of selected rows in tableView inside segmentedController? 【发布时间】:2021-08-24 16:28:43 【问题描述】:我有一个带有两个段的分段控制器。每个段都有一个公共的 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()
【问题讨论】:
我认为问题在于您的视图层次结构。如果有一个“共享”表格视图,它不应该在分段控件的上方吗?如果它属于两个段,每个段中不应该有两个表视图(具有相同的数据源)吗?如果需要,我可以发布代码。 听起来你已经为自己命名了UISegmentedControl
'segmentedControl'。不管你怎么称呼它,“segmentedControl”是从哪里来的?它的IBOutlet
声明在哪里?
【参考方案1】:
您可以将选择存储为视图模型中的列表 然后在表格视图中
伪代码
if segmentedControl.selectedSegmentIndex == 0
if viewModel.selectedYears.contains(indexPath.row)
viewModel.selectedYears.remove(indexPath.row)
else
viewModel.selectedYears.append(indexPath.row)
【讨论】:
谢谢。我明白了你的想法。以这种方式解决了选择状态任务【参考方案2】: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()
【讨论】:
以上是关于如何在分段控制器内的 tableView 中保存选定行的状态?的主要内容,如果未能解决你的问题,请参考以下文章
将复选标记保存到 tableView Swift 时出现问题
如何在加载了 JSON API 数据的 tableview 单元格中保存复选标记属性?