ios - 使用 TrailingSwipeActionsConfigurationForRowAt 删除单元格时出现一些奇怪的动画错误
问题描述
我正在尝试使用 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
当我将单元格拖到左侧时,我看到了预期的删除操作,并且按下该操作会调用该方法。但是,该单元格不会从表格中删除。相反,动作保持锁定,单元格的其余内容滑回右侧,就好像我没有按下动作就松开了手指一样。然后,如果我在我的应用程序中点击其他地方,动作会最小化回到右侧,并且单元格会消失而没有任何类型的删除动画。这是我记录的错误的视频。这里发生了什么?
解决方案
弹出的第一件事是您没有在闭包handler
结束时调用完成处理程序(在您的情况下是属性) 。UIContextualAction
如中,handler(true)
。
第二件事是您没有做任何事情来确保动作在表格视图中正确动画。执行此操作的非侵入式方法(无需从数据源重新加载整个表视图)是使用:
tableView.beginUpdates()
tableview.endUpdates()
PS 理想情况下,您应该让您的数据源连接到您的表格视图,以便表格视图对数据源的观察者触发的事件做出反应,而不是“手动”删除表格行以响应 UI 操作。
推荐阅读
- ios - 无法使用 uiswipegesturerecognizer 默认功能多次弹出到视图控制器
- c# - 当表单边框样式设置为 SizeableToolWindow 时,表单大小减小
- python - 如何实现按计划执行任务?
- java - Android - 实时处理预览帧
- python-3.x - ValueError:可迭代原始文本文档,收到字符串对象
- php - 如何将 CONSTRAINT 与 SHOW CREATE TABLE 分开?
- typescript - data-html2canvas-ignore="false" 不工作
- mysql - 具有一对多左连接的 SQL 查询排除任何不存在的
- javascript - 如何实现预填充的输入字段?
- phaser-framework - Phaser 3:如何检测位置是否有组成员