滚动时UITableView单元格被破坏

时间:2015-12-02 03:34:06

标签: ios swift uitableview uiviewcontroller pull-to-refresh

在我的iOS应用程序中,我正在处理UITableView中的故障。我的表格视图中的每个单元格都包含三个图标(三个小图像代表滑板,自行车和旱冰鞋)。通过查看第一个应用程序屏幕截图here查看此表格视图的屏幕截图,您将看到我正在谈论的内容。

这三个显示在我的表视图的每个单元格中的图标都是“着色”的黑色或灰色,具体取决于从API调用异步检索的布尔值。到目前为止,在使用应用程序时,每个单元格总是将所有三个图标都染成黑色,所以我从未遇到过任何问题......直到我测试了当其中一个图标是灰色时会发生什么。

当所有图标都是黑色时,没有问题。如果一个单元格中只有一个图标是灰色的,那么一切都会破裂。最初表视图将加载正常,只有一个灰色图标。但是当你向下滚动或拉动以刷新表格视图时,突然其他单元格开始包含灰色图标。当你向上和向下滚动时,细胞变得越来越腐败,并且当只有一个细胞确实需要时,大多数细胞最终都有灰色图标。这很奇怪......就像一个灰色图标正在倍增并感染我的桌面视图大声笑。

这里的问题是我显然不知道如何在UITableView中正确使用和更新单元格。我真的不知道问题是什么。我并不是iOS开发经验丰富的人。我的代码非常邋and,有些尴尬,但如果你仔细观察并告诉我我做错了什么,我会很感激。

查看与此问题相关的代码here。谢谢你的帮助!

2 个答案:

答案 0 :(得分:2)

您需要根据您的bool值将UIImageView.image设置为不同的颜色。

if (!parkForIndexPath(indexPath).skateboardersAllowed()) {
    skateboardIcon.image = skateboardIcon.image?.imageWithColor(UIColor.darkGrayColor())
} else {
    skateboardIcon.image = skateboardIcon.image?.imageWithColor(UIColor.blackColor())
}

在滚动过程中某些图像变为灰色的原因是因为您重复使用了单元格,因此当重复使用带有灰色图像的单元格时,灰色图像仍会保留,因为您没有重置颜色。

答案 1 :(得分:0)

但是,您要创建表单元格,将它们重置为基值。我猜你当前已经设置了它,如果它符合布尔参数,它会将其设置为灰色,否则为黑色。最初将它们全部设置为黑色,然后如果满足布尔值,则将其设置为灰色。

else if (indexPath.row < self.parks.count) {
    skateboardIcon.image = skateboardIcon.image?.imageWithColor(UIColor.darkGrayColor())
}

如果符合参数

,则设置的其余代码