Ios 自定义UITableViewCell数据在滚动时重复

Ios 自定义UITableViewCell数据在滚动时重复,ios,swift,uitableview,Ios,Swift,Uitableview,我正在使用自定义的tableview单元格。我有两个部分,第一个是包含动态高度textview的自定义单元格,第二个是包含标签的自定义单元格,第一行有StartDate,第二行有EndDate。选择第二部分(DateCell)中的行时,将显示DatePickerCell类型单元格中的日期选择器。 StartDate和EndDate行都使用DateCell类型的自定义单元格 问题是当滚动tableview时,相同的数据同时出现在StartDate和EndDate中。 我正在从故事板加载单元格,因此

我正在使用自定义的tableview单元格。我有两个部分,第一个是包含动态高度textview的自定义单元格,第二个是包含标签的自定义单元格,第一行有StartDate,第二行有EndDate。选择第二部分(DateCell)中的行时,将显示DatePickerCell类型单元格中的日期选择器。 StartDate和EndDate行都使用DateCell类型的自定义单元格

问题是当滚动tableview时,相同的数据同时出现在StartDate和EndDate中。 我正在从故事板加载单元格,因此单元格不会为零。 我对StartDate和EndDate使用了不同的重用标识符,但问题仍然存在

另外,在这种情况下,有人能建议在PrepareForuse方法中应该做什么吗

请在下面查找代码

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) ->Int{
if section == 1 {
        if isDatePickerVisible == true {
            return 3
        }
        return 2
 }
 return 1
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    var identifier = ""
    switch indexPath.section {
        case 0 : identifier = kTextViewCellID
        case 1 :
            if datePickerIndexPath == indexPath && isDatePickerVisible == true   {
                identifier = kDatePickerCellID
            }
            else if indexPath.row == 0 {
                identifier = kStartDateCellID
            }
            else {
                identifier = kEndDateCellID
            }
        default: identifier = ""
    }

    let cell = tableView.dequeueReusableCellWithIdentifier(identifier, forIndexPath: indexPath)
    if let c = cell as?  TextCell {
        //do something
    }
    //Both StartDate and EndDate are DateCell type
    else if let c = cell as?  DateCell {
        c.dateLable.text =  … //some text
        c.dateValue?.text = … // some date in string format
    }
    else if let c = cell as? DatePickerCell {
       //show DatePicker
    }
    return cell
}


class DateCell : UITableViewCell {
@IBOutlet weak var dateValue: UITextField?
@IBOutlet weak var dateLable: UILabel!

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

func setSomeColor() {
    dateValue?.textColor = UIColor.redColor()
}

func clearDateValue (clear: Bool) {
    //...
}
override func setSelected(selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)
}
}

对“c”变量进行更改,但返回“cell”变量。您应该返回“c”变量或对“cell”变量进行更改。

通过快速查看,我认为这对于查看如何获取填充单元格标签的数据非常有用。您只为我们显示了“…”部分,其中指定了标签的日期。这似乎是这个谜题的一个重要部分。前面的评论是正确的,特别是因为在配置单元格之前使用的条件(
as?DateCell
)不足以区分开始日期单元格和结束日期单元格。因为单元格是一个NSObject(类),c将指向与单元格相同的对象,所以这部分代码不是问题所在。