Swift 中 UITableView 的奇怪行为

Odd behavior with UITableView in Swift

我有一个带有两个标签和一个图像的自定义单元格。我在 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()

    }

为了测试,我对前两个单元格进行了着色。我的问题是前两个单元格变色了,但如果我向下滚动,每两个、三个、四个单元格(取决于设备——我猜是设备高度——,另外两个单元格也会变色。

它是 odd/weird 因为其余的标签工作正常。

我应该从哪里开始寻找?

如果我打印 json 数据,我收到一切正常

这是一张动图:

GIF

基本上我的问题是,当我向下滚动时,数据消失但仅从一个标签消失,其余的标签和图像则没有。

从您的代码中看不出哪些单元格是 "colored"。是否来自 orangeColor() 条件?

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

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

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

这里@aimak

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

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

    }
    else{

        cell.Multimedia.hidden = true
    }