Ios 滚动Swift时tableView的值重复

Ios 滚动Swift时tableView的值重复,ios,arrays,swift,uitableview,Ios,Arrays,Swift,Uitableview,我有一个tableView来显示星期几的计时 timingsArray在tableView中用于显示计时 TimingBj型定时雷达 class timingObj { var dayNo: Int? var open: String? var close: String? var dayName: String? init(json: JSON){ // to take data from json } init(n

我有一个tableView来显示星期几的计时

timingsArray在tableView中用于显示计时

TimingBj型定时雷达

class timingObj {
    var dayNo: Int?
    var open: String?
    var close: String?
    var dayName: String?

     init(json: JSON){
        // to take data from json
    }

    init(name: String, number: Int){
        self.dayName = name
        self.dayNo = number
    }
}
在tableView中,我想显示所有日期及其计时,如果该日期没有计时,则计时单元格将为空

let cell = tableView.dequeueReusableCellWithIdentifier("TimingsCell", forIndexPath: indexPath) as! timingCell     
            let timings = self.Details!.timingsArray
            let dayTime = timings[indexPath.row]
            cell.dayLabel.text = dayTime.dayName
            if dayTime.open != nil && dayTime.close != nil {
                cell.timeLabel.text = "\(convertTimeFormat(dayTime.open!)) - \(convertTimeFormat(dayTime.close!))"
            }
            return cell
这是细胞的类别

class timingCell: UITableViewCell {

    @IBOutlet weak var dayLabel: UILabel!

    @IBOutlet weak var timeLabel: UILabel!

}
e、 星期二和星期四只有时间

问题是当我上下滚动时,星期二的计时值在星期三重复,当我继续滚动时,计时值在其他单元格中也重复

有什么想法吗?提前感谢您

来自苹果文档:

在运行时,表视图将单元格对象存储在内部队列中。当表视图要求数据源配置要显示的单元格对象时,数据源可以通过向表视图发送dequeueReusableCellWithIdentifier:消息并传递重用标识符来访问排队对象。数据源在返回单元格之前设置单元格的内容和任何特殊属性。单元对象的这种重用是一种性能增强,因为它消除了单元创建的开销

因此,当从队列中重用单元时,您要做的是检索您已经创建和配置的单元。对创建的单元格所做的更改也将应用于重复使用的单元格,一旦重复使用的单元格不再可见,滚动时就会显示这些单元格。这意味着您必须将任何要覆盖的自定义值重新分配给正在显示的唯一单元格,如果没有要显示的内容/空字符串,也适用于此。否则,您将得到随机结果,正如您所经历的那样

let cell = tableView.dequeueReusableCellWithIdentifier("TimingsCell", forIndexPath: indexPath) as! timingCell     
let timings = self.Details!.timingsArray
let dayTime = timings[indexPath.row]
cell.dayLabel.text = dayTime.dayName

if dayTime.open != nil && dayTime.close != nil {
    cell.timeLabel.text = "\(convertTimeFormat(dayTime.open!)) - \(convertTimeFormat(dayTime.close!))"
}
else{
 //change label to empty string when reusing
 cell.timeLabel.text = "";
}

return cell

prepareforeuse
方法添加到单元格类中,将单元格重置为其初始状态,其效果与@CH Uck的答案相同

例如:

func prepareForReuse() {
   super.prepareForReuse()
   self.dayLabel.text = ""
   self.timeLabel.text = ""
}
另请参见:
在Apple developer文档中。

您应该在自定义单元格类中实现
prepareforeuse
,在该类中,您可以重置需要重置的内容。例如:

class timingCell: UITableViewCell {

    @IBOutlet weak var dayLabel: UILabel!

    @IBOutlet weak var timeLabel: UILabel!

    func prepareForReuse() {
        super.prepareForReuse()
        cell.timeLabel.text = nil
        cell.dayLabel.text = nil
    }
}

请包括一些解释。@CHUck非常感谢你。我现在已经测试过了,它可以工作了,但是你能给我解释一下吗?这会清除表中单元格中的所有内容(文本字段),你能用一个example@NishadArora什么意思?已经有一个例子了。您具体想知道什么?具体地说,我想知道当涉及到表视图中的多个自定义单元格时,我们如何使用函数PrepareForereuse,因为这对我来说通常会变得复杂,当我滚动时,我的表视图单元格值会变得“混乱”。提前感谢。