【问题标题】:TableView reloadData right after deleteRows在 deleteRows 之后 TableView reloadData
【发布时间】:2020-08-29 10:49:04
【问题描述】:

在我的tableView 中,我删除了一行,然后我需要重新加载整个表以重新计算一些值。最好的方法是什么?由于deleteRows 没有完成处理程序,并且根据SO 上的this comment,我不应该在删除一行后立即调用tableView.reloadData()

func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
        let deleteAction = UIContextualAction(style: .normal, title: "Delete") { [weak self] (action, view, completion) in
            guard let weakSelf = self else { return }
            
            CoreDataManager.manager.deleteActivity(activity: weakSelf.sortedActivites[indexPath.row])
            weakSelf.sortedActivites.remove(at: indexPath.row)
            tableView.deleteRows(at: [indexPath], with: .automatic)
            tableView.reloadData()
            completion(true)
        }
        
      deleteAction.backgroundColor = UIColor.red
        
      return UISwipeActionsConfiguration(actions: [deleteAction])
}

【问题讨论】:

    标签: ios objective-c swift xcode uitableview


    【解决方案1】:

    在您的情况下,仅调用 reloadData 就足够了。

    如果您需要 deleteRows 的完成回调,您可能想尝试在 UIView.animate 块内使用 none 动画调用 deleteRows

    UIView.animate(
      withDuration: 0.2,
      animations: {
        self.tableView.deleteRows(at: indexPaths, with: .none)
      },
      completion: { _ in
        self.tableView.reloadData()
      })
    

    【讨论】:

    • true,但是我没有删除动画。这不是一个大问题,但我只是对如何按照我描述的方式进行操作感兴趣
    【解决方案2】:

    一种可能的解决方案是使用UITableViewDiffableDataSource。这是 Apple 在 iOS 13 中向我们展示的新功能。使用此 API,您可以获得声明式编程所具有的一些巨大优势,并且可能会消除在许多不同应用中发现的一整类非常常见的错误。

    如果您的应用是为 13.0+ 设备构建的,您可以尝试一下。这将为您处理删除、插入等操作。因此,您需要做的就是在您从 CoreDataManager 删除您的活动后立即创建一个新快照并将其应用到 dataSource

    dataSource.apply (someSnapshot, animatingDifferences: true, Completion: nil)

    【讨论】:

      【解决方案3】:

      你试过reloadSections()吗?

      tableView.reloadSections(IndexSet(integersIn: 0...0), with: UITableView.RowAnimation.top)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-15
        • 1970-01-01
        • 1970-01-01
        • 2011-12-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多