另一个解决scheme,而不是tableView.reloadData()

我使用这个代码在tableView上调用批量更新(开始/结束更新):

let oldImageSet = Set(oldImageArray) let newImageSet = Set(self.images) let missingImages = newImageSet.subtracting(oldImageSet) let missingImageIndexPaths = Array(missingImages).map{NSIndexPath(row: self.images.index(of: $0)!, section: 0)} //Array(missingImages).map{NSIndexPath(forRow:newImageUUIDArray.indexOf($0)!,inSection:1)} let removedImages = oldImageSet.subtracting(newImageSet) let removedImageIndexPaths = Array(removedImages).map{NSIndexPath(row:oldImageArray.index(of: $0)!,section:0)} self.tableView.beginUpdates() if missingImageIndexPaths.isEmpty == false { self.tableView.insertRows(at: missingImageIndexPaths as [IndexPath],with:.top) } if removedImageIndexPaths.isEmpty == false { self.tableView.deleteRows(at: removedImageIndexPaths as [IndexPath],with:.none) } self.tableView.endUpdates() 

哪个工作正常。

编辑

这是我的tableView部分计数,我如何设置:

 func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { return 55 } func numberOfSections(in tableView: UITableView) -> Int { return posts.count } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 1 } 

但现在我有另一个tableView,我想能够打电话给这个,但它有'部分',所以当我使用这个我得到一个崩溃…?

有谁知道如何在一个tableView上使用这段代码?

提前谢谢了!

你只需要将你正在做的事情用在行上,这意味着将IndexPath改为IndexSetIndexSet可以用一个Int数组来初始化,每个Int代表一个对应的部分。

  let oldImageSet = Set(oldImageArray) let newImageSet = Set(self.images) let addedImages = newImageSet.subtracting(oldImageSet) // map each image to the section equivalent to its index in `self.images` let addedImageSections = Array(missingImages).map{ self.images.indexOf($0)! } let addedImageIndexSet = IndexSet(addedImageSections) // repeat above process but in reverse to find images that have been removed let removedImages = oldImageSet.subtracting(newImageSet) let removedImageSections = Array(removedImages).map{ oldImageArray.index(of: $0)! } let removedImageIndexSet = IndexSet(removedImageSections) self.tableView.beginUpdates() // if images have been added insert new sections if !addedImageIndexSet.isEmpty { self.tableView.insertSections(addedImageIndexSet, with: .top) } // if images have been deleted remove sections if !removedImageIndexSet.isEmpty { self.tableView.deleteSections(removedImageIndexSet, with: .none) } self.tableView.endUpdates() 
 func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { return 55 } func numberOfSections(in tableView: UITableView) -> Int { return posts.count } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 1 } 

用下面的代码replace代码:

 func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { return 55 } func numberOfSections(in tableView: UITableView) -> Int { return 1 } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return posts.count }