swift - 删除的单元格出现在 tableView 列表的末尾
问题描述
我有一个请求更新新传入消息的数组(如果存在,则附加一个新实例)
@objc
private func loadNewThread() {
func refreshThreads(newThreads: [ThreadModel]) {
var oldThreads: [ThreadModel] = self.threads
var updatedThreads: [ThreadModel] = []
for new in newThreads {
updatedThreads.append(new)
if let index = oldThreads.firstIndex(where: { $0.threadId == new.threadId }) {
oldThreads.remove(at: index)
}
}
updatedThreads.append(contentsOf: oldThreads)
self.threads = updatedThreads
DispatchQueue.main.async {
self.updateEmptyState()
self.tableView.reloadData()
}
}
messageService.getThreads(searchText: searchBar.text?.lowercased(), page: 0) { (result) in
switch result {
case .value(let newThreads):
refreshThreads(newThreads: newThreads)
case .error(let errors):
self.handleErrors(errors: errors)
}
}
}
我每 5 秒通过 Timer 在 viewDidLoad 中更新它
override func viewDidLoad() {
super.viewDidLoad()
Timer.scheduledTimer(withTimeInterval: 5.0, repeats: true, block: { [weak self] (timer) in
guard let self = self else {
timer.invalidate()
return
}
self.loadNewThread()
})
}
我分别通过元素索引从数组和行中删除元素
if let index = self.threads.firstIndex(where: { $0.threadId == thread.threadId }) {
let cellIndex = self.threads.firstIndex(where: { $0.threadId == thread.threadId })
self.threads.remove(at: index)
if let cellIndex = cellIndex {
self.tableView.beginUpdates()
self.tableView.deleteRows(at: [IndexPath.init(row: cellIndex, section: 0)], with: .automatic)
self.tableView.endUpdates()
self.animateLayout()
}
但是删除后,被删除的单元格出现在tableView列表的末尾。我想删除元素的请求在请求追加到数组之后完成我应该如何让我的单元格消失?
解决方案
推荐阅读
- sql - SQL 视图中的动态模式名称
- solrcloud - solr admin UI 访问限制为 security.json
- maven - 使用----java jar通过maven部署错误
。罐 - java - 在 Spring MVC 应用程序运行时加载属性文件
- kubernetes - 如何阻止 CronJob 重新创建失败的作业?
- java - 如何在java中将空字符串反序列化为空值?
- c# - 在 Unity3d 中使用 TangibleEngine 时,如何避免 Tangibles 在多点触控屏幕中使用的接触点?
- angular - 在 ReactiveForm 中过滤复选框列表会导致呈现错误
- node.js - NodeJS mongoose 查询和承诺
- python - 根据列表中的值生成格式字符串