UITableView-删除带有动画的行

时间:2018-10-13 20:48:18

标签: swift uitableview uikit

我正在尝试使用动画从tableview中删除行,但是在大多数情况下,它会卡住。 15次尝试中有1次将导致播放此动画。这是我的删除动作:

func contextualDeleteAction(forRowAtIndexPath indexPath: IndexPath) -> UIContextualAction {

    let action = UIContextualAction(style: .destructive,
                                    title: "Delete") { (contextAction: UIContextualAction, sourceView: UIView, completionHandler: (Bool) -> Void) in

                                            Model().context.delete(notesArray[indexPath.row])
                                            notesArray.remove(at: indexPath.row)
                                            self.myTableView.deleteRows(at: [indexPath], with: UITableView.RowAnimation.bottom)
                                            Model().saveItems()                             

    }
    action.title = "Delete"

    return action
}

这是刷卡时卡住的样子。 Stucked when swiping

当按下删除按钮时。

enter image description here

我也尝试使用tableView.beginUpdate()和tableView.endUpdate(),但没有得到不同的结果。

2 个答案:

答案 0 :(得分:3)

问题在于您已经忘记了此方法的主要职责:必须调用完成处理程序!

    Model().context.delete(notesArray[indexPath.row])
    notesArray.remove(at: indexPath.row)
    self.myTableView.deleteRows(at: [indexPath], with: UITableView.RowAnimation.bottom)
    Model().saveItems()
    completionHandler(true) // <-- look!

答案 1 :(得分:0)

Swift 4中,您可以执行删除动画,就像iPhone Messages动画一样。

使用此:

tableView.deleteRows(at: [indexPath], with: UITableViewRowAnimation.automatic)