使用TrailingSwipeActionsConfigurationForRowAt删除单元格时出现一些奇怪的动画错误

时间:2019-02-28 18:31:25

标签: ios swift uitableview

我正在尝试使用这种tableView方法简单地删除单元格。出于某些原因,这样做会造成我无法弄清的怪异动画错误。这是我的代码:

let deleteSubcatAction = UIContextualAction(style: .destructive, title: "Delete") { (action, view, handler) in
    print("Delete Subcategory Action Tapped")
    let subcategory = Global.budget.categories[indexPath.section].subcategories[indexPath.row]
    Global.budget.categories[indexPath.section].subcategories.remove(at: indexPath.row)
    tableView.deleteRows(at: [indexPath], with: .left) }
    
deleteSubcatAction.backgroundColor = .red
let rowConfig = UISwipeActionsConfiguration(actions: [deleteSubcatAction])
return rowConfig

当我将单元格拖动到左侧时,我看到了预期的删除操作,然后按该操作将按预期方式调用该方法。但是,该单元格不会从表中删除。取而代之的是,动作保持锁定在原处,单元格的其余内容向右滑动,就好像我在不按任何动作的情况下松开了手指一样。然后,如果我在应用程序中的其他位置点击,操作将最小化回到右侧,并且单元格将消失而没有任何形式的移除动画。我记录的错误中的Here's a video。这是怎么回事?

1 个答案:

答案 0 :(得分:1)

弹出的第一件事是,您没有在handler结束时调用完成处理程序(在您的情况下为UIContextualAction属性)。如handler(true)

第二件事是您没有做任何事情来确保动作在表格视图中正确显示。这样做的非介入方式(无需从数据源重新加载整个表视图)是通过使用

tableView.beginUpdates()
tableview.endUpdates()

See the API docs了解更多信息。

P.S。理想情况下,您应该将数据源连接到表格视图,以使表格视图对数据源的观察者触发的事件做出反应,而不是响应UI操作“手动”删除表格行。