动画后UITableViewRowAction完成

时间:2015-04-14 07:34:07

标签: swift animation uitableviewrowaction

在我的表格中,UITableViewRowActioneditActionsForRowAtIndexPath。当我按下它时,它将删除我的数组中的所有数据,导致在视图更改结束时触发数组上的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的动画完成后(行移回它的位置)的某种完成,然后清空数组并更改视图。如果可能的话,我想避免使用手动延迟。

1 个答案:

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