【问题标题】:How to save state of selected rows in tableView inside segmentedController?如何在分段控制器内的 tableView 中保存选定行的状态?
【发布时间】: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 声明在哪里?

标签: swift uitableview uikit tableview


【解决方案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()
            }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-22
    • 2016-10-22
    • 1970-01-01
    • 1970-01-01
    • 2016-04-08
    • 1970-01-01
    相关资源
    最近更新 更多