具有不同editingStyle的UITableView,删除后出现故障

时间:2016-10-05 19:50:17

标签: uitableview

我有一个可以编辑的表格视图,所有行都可以移动,有些行可以删除。

问题:我删除第1行,然后触摸第2行的重新排列按钮,它就会丢失缩进。 我做错了还是这个错误?

Screenshot link 测试项目:https://drive.google.com/open?id=0Bycu0Xewdx_XZlhwcW9ZQlFEcnc

class TableViewController: UITableViewController {

var items = ["0", "1", "2", "3", "4"]


override func viewDidLoad() {

    self.navigationItem.setRightBarButton(self.editButtonItem, animated: false)
}



override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    return self.items.count
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)

    cell.textLabel?.text = self.items[indexPath.row]

    // set background colors for visibility
    cell.textLabel?.backgroundColor = UIColor.green
    cell.contentView.backgroundColor = UIColor.yellow

    return cell
}



override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {

    return true
}

// MARK: - Delete
override func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCellEditingStyle {

    if self.items[indexPath.row] == "1" ||  self.items[indexPath.row] == "3" {

        return UITableViewCellEditingStyle.delete
    }


    return UITableViewCellEditingStyle.none
}

override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {

    if editingStyle == .delete {

        self.items.remove(at: indexPath.row)
        tableView.deleteRows(at: [indexPath], with: UITableViewRowAnimation.automatic)
    }
}


// MARK: - Move
override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool {

    return true
}

override func tableView(_ tableView: UITableView, moveRowAt sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath) {

    let item = self.items[sourceIndexPath.row]
    self.items.remove(at: sourceIndexPath.row)
    self.items.insert(item, at: destinationIndexPath.row)
}

}

1 个答案:

答案 0 :(得分:0)

自我回答,看来在deleteRow之后,下一个单元格将shouldIndentWhileEditing设置为false。

所以解决办法就是把它转回来:

        if let cell = tableView.cellForRow(at: indexPath), cell.shouldIndentWhileEditing == false {
            cell.shouldIndentWhileEditing = true
        }