UITableView自定义单元格数据在快速滚动时不匹配

时间:2017-07-12 07:01:11

标签: ios swift uitableview custom-cell

    class CalenderCell: UITableViewCell {

    @IBOutlet var lblDay: UILabel!
    @IBOutlet var lblRest: UILabel!
    @IBOutlet var imgCompleted: UIImageView!

    override func awakeFromNib()
    {
        super.awakeFromNib()
    }

    func updateCell(exerciseobject : Exercise)
    {
        let resttext = NSLocalizedString("restday", comment: "")
        let day = NSLocalizedString("day", comment: "")
        let dayexercise = "\(day) \(exerciseobject.exerciseDayID)"

        if !exerciseobject.exerciseRestDay
        {
            lblDay.text = dayexercise
            if exerciseobject.exerciseDayStatus
            {
                imgCompleted.isHidden = false
            }
            else
            {
                imgCompleted.isHidden = true
            }
            lblRest.isHidden = true

        }
        else
        {
            lblDay.isHidden = true
            imgCompleted.isHidden = true
            lblRest.text = resttext
            viewWithTag(100)?.backgroundColor = UIColor(red:1.00, green:0.21, blue:0.28, alpha:1.0)
        }
    }
}

以上是我的自定义单元格类,下面是我的tableview类 当我尝试构建应用程序时,一切都运行良好,但每当我快速滚动时,数据就会出现不匹配或数据在更多单元格中出现的情况。

我试过了:

prepareforreuse() 
{
  //clearing label and images here 
}

在我的自定义单元格类中,但仍然得到快速滚动视图数据不匹配

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
    if let cell = calenderTable.dequeueReusableCell(withIdentifier: "CalenderCell", for: indexPath) as? CalenderCell
    {

        cell.updateCell(exerciseobject: days[indexPath.row])
        return cell
    }

    else
    {
        return UITableViewCell()
    }
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
    return days.count
}

1 个答案:

答案 0 :(得分:0)

使用prepareForReuse并将控件重置为默认值,或确保更新updateCell方法中每个路径的所有状态。

e.g。

func updateCell(exerciseobject : Exercise)
{
    let resttext = NSLocalizedString("restday", comment: "")
    let day = NSLocalizedString("day", comment: "")
    let dayexercise = "\(day) \(exerciseobject.exerciseDayID)"

    if !exerciseobject.exerciseRestDay
    {
        lblDay.text = dayexercise
        lblDay.isHidden = false
        if exerciseobject.exerciseDayStatus
        {
            imgCompleted.isHidden = false
        }
        else
        {
            imgCompleted.isHidden = true
        }
        lblRest.isHidden = true

        viewWithTag(100)?.backgroundColor = nil
    }
    else
    {
        lblDay.isHidden = true
        imgCompleted.isHidden = true
        lblRest.text = resttext
        lblRest.isHidden = false
        viewWithTag(100)?.backgroundColor = UIColor(red:1.00, green:0.21, blue:0.28, alpha:1.0)
    }
}