我有一个可以编辑的表格视图,所有行都可以移动,有些行可以删除。
问题:我删除第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)
}
}
答案 0 :(得分:0)
自我回答,看来在deleteRow之后,下一个单元格将shouldIndentWhileEditing设置为false。
所以解决办法就是把它转回来:
if let cell = tableView.cellForRow(at: indexPath), cell.shouldIndentWhileEditing == false {
cell.shouldIndentWhileEditing = true
}