在我的表格中,UITableViewRowAction
为editActionsForRowAtIndexPath
。当我按下它时,它将删除我的数组中的所有数据,导致在视图更改结束时触发数组上的didSet
。代码如下:
var data: [Int] = [Int]() {
didSet {
if data.isEmpty {
// change view
}
}
}
func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [AnyObject]? {
var confirm = UITableViewRowAction(style: .Default, title: "Confirm") { (action: UITableViewRowAction!, indexPath: NSIndexPath!) -> Void in
self.data.removeAll(keepCapacity: false)
self.tableView.setEditing(false, animated: true)
}
return [confirm]
}
我想得到的是UITableViewRowAction
的动画完成后(行移回它的位置)的某种完成,然后清空数组并更改视图。如果可能的话,我想避免使用手动延迟。
答案 0 :(得分:3)
试试这段代码:
var data: [Int] = [Int]() {
didSet {
if data.isEmpty {
// change view
}
}
}
func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [AnyObject]? {
var confirm = UITableViewRowAction(style: .Default, title: "Confirm") { (action: UITableViewRowAction!, indexPath: NSIndexPath!) -> Void in
CATransaction.begin()
CATransaction.setCompletionBlock({
self.data.removeAll(keepCapacity: false)
})
self.tableView.setEditing(false, animated: true)
CATransaction.commit()
}
return [confirm]
}
CATransaction.setCompletionBlock({/* completion code */})
中的代码在CATransaction.begin()
和CATransaction.commit()
之间的其他代码完成执行后运行。因此self.data.removeAll(keepCapacity: false)
应在self.tableView.setEditing(false, animated: true)
完成动画后调用。
希望这有帮助!
注意:我没有使用tableView.setEditing(...)
自行测试此代码,但我已将其用于tableView.deleteRowsAtIndexPaths(...)
。