在Swift中使用UITableView的奇怪行为

时间:2016-01-10 15:33:12

标签: ios swift uitableview custom-cell

我有一个带有两个标签和一个图像的自定义单元格。我在Json收到一些来自互联网的数据。一切正常;每个单元格都填充相应的数据。我添加了一个必须像其他标签一样填充的新标签。这是数据:

let cell = tableView.dequeueReusableCellWithIdentifier("friendCell") as! friendCell

cell.friendPicture?.image = newImageUser

cell.friendName.text = "@\(theName[indexPath.row])"

if repliesNumber[indexPath.row] == "0"{

        cell.repliesNumber.textColor = UIColor.redColor()
    }
    else{

        cell.repliesNumber.textColor = UIColor(patternImage: UIImage(named:"backgroundPattern")!)
    }

if AttachedImage[indexPath.row] != ""{

        cell.backgroundColor = .orangeColor()

    }

为了测试我已经制作了前两个细胞的颜色。我的问题是第一个两个细胞变色,但如果我向下滚动,每两个,三个,四个细胞(取决于设备 - 设备高度,我猜 - 另外两个细胞也会变色。

它奇怪/奇怪,因为其余的标签工作正常。

我应该从哪里开始寻找?

如果我打印json数据,我收到的一切都没问题

这是一个gif:

GIF

基本上我的问题是当我向下滚动数据时只会从标签上消失,其余的标签和图像都不会消失。

2 个答案:

答案 0 :(得分:2)

从您的代码中不太清楚的是哪些单元格是"着色"。它来自orangeColor()条件吗?

无论如何,UITableView中的UITableViewCells会被重用,这意味着你可以在离开它们的完全相同的状态下获得它们。这就是为什么,如果你不重置backgroundColor,滚动时它们仍然是橙色的。

所以基本上,每当你在一个单元格中的某个条件下做某事时,不要忘记在不满足条件时恢复它的状态。在你的情况下,这给出了:

// cellForRowAtIndexPath {
if itemIsMultimedia() {
    cell.Multimedia.text = "it's multimedia"
    cell.Multimedia.hidden = false
}
else {
    cell.Multimedia.text = ""
    cell.Multimedia.hidden = true
}

答案 1 :(得分:0)

这里是@aimak

if AttachedImage[indexPath.row] != ""{

        cell.Multimedia.text = "It's multimedia"

    }
    else{

        cell.Multimedia.hidden = true
    }