为什么在插入后显示已删除的行而不是新行?

时间:2016-10-24 13:39:48

标签: ios swift uitableview

我有一个带文本字段的自定义单元格。我以标准方式删除行:

override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
    if editingStyle == .Delete {
        dataArray.removeAtIndex(indexPath.row)
        tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Automatic)
    }
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let myCell = tableView.dequeueReusableCellWithIdentifier("cellId", forIndexPath: indexPath) as! MyCell

        myCell.textField.placeholder = dataArray[indexPath.row]

        return myCell
    }

此外,我还将自己的班级用于单元格。

class MyCell: UITableViewCell {

override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
    super.init(style: style, reuseIdentifier: reuseIdentifier)
    setupViews()
}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

let textField: UITextField = {
    var field = UITextField()
    field.placeholder = "Placeholder Text"
    field.translatesAutoresizingMaskIntoConstraints = false   
    return field
}()

func setupViews() {
    addSubview(textField)

    //Constraints stuff
}

问题是如果文本字段包含文本而我删除了该行,插入新行后我会得到带有文本的旧行。

我该如何避免它?我需要干净的排。

顺便说一下,动画也不能正常工作。

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

使用UITableViewCell' prepareForReuse()方法。

func prepareForReuse() {
    textField.text = nil
}

更多信息here

答案 1 :(得分:1)

您的cellForRowAtIndexPath负责在任何单元格上设置正确的值。它可能正在重用您刚刚删除的单元格。确保cellForRowAtIndexPath在调用时根据indexPath重置单元格中的值(特别是删除后)