UITableView错误?错误的可重复使用单元

时间:2019-02-18 08:55:25

标签: ios swift uitableview uisegmentedcontrol

我有10行的默认UITableViewController 带有段控制的UITableViewCell

如果我更改segmentController可能在单元格2中选择的索引,则向下滚动segmentController的此状态将在其他单元格中

cells1(selectedIndex:1) cells2(selectedIndex:1)
cells3(selectedIndex:1) cells4(selectedIndex:1) cells5(selectedIndex:1)

...在单元格2中选择其他索引(2) 向下滚动 和单元格5具有相同的选定索引,但我没有碰到它们

cells1(selectedIndex:1) cells2(selectedIndex:2)
cells3(selectedIndex:1) cells4(selectedIndex:1) cells5(selectedIndex:2)

selected 0 row

row 5 is too selected, why?

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 10
    }

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)

        cell.selectionStyle = .none
        cell.textLabel?.text = String(indexPath.row)
        cell.textLabel?.textColor = .white

        return cell       
    }

2 个答案:

答案 0 :(得分:0)

UITableView和UICollectionView重用单元格。这意味着它仅将足够的单元格保留在内存中以显示屏幕上的内容。当您将单元格滚动出屏幕时,它们会反馈回来,成为正在显示的单元格。您需要正确配置单元格,使其重新出现在override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath)

因此,您需要每次在cellForRow中设置分段控件的选择。

这意味着您将需要一种方法来跟踪对分段控件进行的选择,并在再次显示该单元格时调用该选项以正确设置分段控件。

答案 1 :(得分:0)

通过对UITableViewCell的prepareForReuse方法进行子类化来重置选择。

覆盖函数func prepareForReuse(){

}