2

在我的桌子上,我有一个UITableViewRowActionfor 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完成(行移回原位),然后清空数组并更改视图。如果可能的话,我想避免使用手动延迟。

4

1 回答 1

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

于 2015-08-03T02:15:50.660 回答