滚动关闭并返回到视图时,UITableViewCell样式重置

时间:2017-01-24 11:53:39

标签: ios swift xcode uitableview

我目前在我的项目中有一个TableView,它设置为在按下时将单元格变为绿色,如果再次按下则返回清除。但是,如果我向下滚动到表格视图的底部,然后向上滚动,我的所有单元格都会重置为默认的清晰颜色。

我不知道如何解决这个问题,因为我发现的任何内容都是在Objective-C而不是Swift中。关于如何解决这个问题的任何帮助和建议都会很棒,谢谢。

2 个答案:

答案 0 :(得分:1)

每当UITableViewCell离开屏幕时,您在tableViewController / ViewController中编写的任何函数都会再次运行。

例如在cellForRowAtIndexPath中,如果你有一个cell.setUpCell()或类似的东西,它会重新运行并将你的值重置为原始值。

如果你有

你的MainVC中的var name = testName

并且您更新了单元格中的内容,您也应该更改mainVc中的名称。

答案 1 :(得分:1)

每次滚动或调用tableView.reloadData() UITableView单元格都会重新加载。因此,每次选择UITableViewCell时,将选定的索引(indexPath.row)添加到didSelectRowAt indexPath:委托中的数组(例如:selectedIndexArray)。如果您选择的单元格已被选中,则从 selectedIndexArray 中删除单元格。

cellForRowAt indexPath:使用 selectedIndexArray 管理单元格。

var selectedIndexArray:[Int] = [] //to save selected tableViewCells

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let isSelected = false
    for each in selectedIndexArray
    {
        if each == indexPath.row
        {
            isSelected = true
        }
    }

    if isSelected == true
    {
        //set selected cell color
    }
    else
    {
        //set default cell color
    }
}

您需要编写在didSelectRowAt indexPath:中添加和删除单元格索引的逻辑。