ios - Swift 中 UITableView 的奇怪行为

标签 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

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

最佳答案

从您的代码中并不清楚哪些单元格是“彩色”的。是来自 OrangeColor() 条件吗?

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

所以基本上,每当您在单元格中执行特定条件下的操作时,不要忘记在条件不满足时恢复其状态。在你的情况下,这给出了:

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

关于ios - Swift 中 UITableView 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57158262/

相关文章:

iphone - NSLocalizedString 在某些键查找上失败。损坏的 .Strings 文件?

ios - AVPlayerViewController - UIButton 不触发视频

ios - 全屏打开图像查看图像,然后滑动即可关闭

swift - iOS Swift 支持跨 TextView 吗?

ios - 如何在 Swift 中启用当前禁用的按钮

ios - 如何在 Storyboard Controller 中重用定义为原型(prototype)单元格的自定义 UITableViewCell

ios - 使用 CocoaPods 在 iOS 中安装 Google Analytics 时出错

ios - Swift:无法在自定义 View 上调用 removeFromSuperview()

ios - 如何将单元格中的 View 变为可见?

ios - 动画不适用于 UITableView deleteRowsAtIndexPaths :withRowAnimation: