动画后 UITableViewRowAction 完成
UITableViewRowAction completion after animation
在我的 table 中,我有一个 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
的动画完成后的某种完成(行移回原位),然后清空数组并更改视图。如果可能的话,我想避免使用手动延迟。
试试这个代码:
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(...)
。
在我的 table 中,我有一个 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
的动画完成后的某种完成(行移回原位),然后清空数组并更改视图。如果可能的话,我想避免使用手动延迟。
试试这个代码:
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(...)
。