gpt4 book ai didi

swift - 动画后 UITableViewRowAction 完成

转载 作者:可可西里 更新时间:2023-11-01 01:06:07 24 4
gpt4 key购买 nike

在我的表中,我有一个 UITableViewRowAction 用于 editActionsForRowAtIndexPath。当我按下它时,它会删除数组中的所有数据,从而触发以 View 更改结尾的数组上的 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 的动画完成后(行移回原处),然后清空数组并更改 View 。如果可能,我想避免使用手动延迟。

最佳答案

试试这段代码:

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(...) .

关于swift - 动画后 UITableViewRowAction 完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29621617/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com