如何异步更新UITableView?



如果作为UITableView数据源的数组需要异步更新,例如,其成员被删除并附加通过网络不断接收的数据,那么我们如何更新UITableView并插入和删除相应的行?

好吧,对于一个tableView.reloadData()将始终刷新整个表视图。因此,如果数据来自网络,您可以随时调整数据源,然后调用tableView.reloadData()

您还可以将tableView.beginUpdates()+tableView.endUpdates()与相应的插入、删除、移动调用一起使用(请参阅 Apple 文档( 但这些通常用于对更改进行动画处理。 - 您必须先更新数据源,并知道您尝试更改的索引路径。

我使用主队列来更新它,因此当从网络事件调用异步函数时,它将被重定向到主线程

func theFuncToBeCalledBySyncEvent(addThisCell cell: UITableViewCell){
DispatchQueue.main.async {
theTable.beginUpdates()
theSourceArray.append(cell)
theTable.insertRows(at: [IndexPath.init(row: theSourceArray.count - 1, section: 0)], with: UITableViewRowAnimation.left)
theTable.endUpdate()
}
}

最新更新