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 数据,我收到一切正常
这是一张动图:
基本上我的问题是,当我向下滚动时,数据消失但仅从一个标签消失,其余的标签和图像则没有。
从您的代码中看不出哪些单元格是 "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
}
我有一个带有两个标签和一个图像的自定义单元格。我在 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 数据,我收到一切正常
这是一张动图:
基本上我的问题是,当我向下滚动时,数据消失但仅从一个标签消失,其余的标签和图像则没有。
从您的代码中看不出哪些单元格是 "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
}