动画后 UITableViewRowAction 完成

Posted

技术标签:

【中文标题】动画后 UITableViewRowAction 完成【英文标题】:UITableViewRowAction completion after animation 【发布时间】:2015-04-14 07:34:07 【问题描述】:

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

【问题讨论】:

【参考方案1】:

试试这个代码:

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

【讨论】:

以上是关于动画后 UITableViewRowAction 完成的主要内容,如果未能解决你的问题,请参考以下文章

UITableViewRowAction 可访问性值

iOS 11 中的 UITableViewRowAction 太宽

使用 UITableViewRowAction 执行 segue 控制

UITableViewRowAction 行为不可预测

如何在 UITableViewRowAction 中添加图像?

减小 UITableViewRowAction 的字体大小