ios – 重新加载具有动画(Swift)的表视图单元格

有没有办法重新加载具有动画的多个部分的特定UITableView单元格?

我一直在使用:

self.TheTableView.reloadSections(NSIndexSet(index: 1),withRowAnimation: UITableViewRowAnimation.Right)

这样动画化该部分中的所有单元格.另一个选择是使用:

self.TheTableView.reloadRowsAtIndexPaths(<#indexPaths: [AnyObject]#>,withRowAnimation: <#UITableViewRowAnimation#>)

编辑:

使用reloadRowsAtIndexPaths后

由于未被捕获的异常’NSInternalInconsistencyException’终止应用程序,原因:’无效更新:第1节中的无效行数.更新(5)后现有部分中包含的行数必须等于该列中包含的行数更新前的部分(4),加或减去从该部分插入或删除的行数(0插入,0删除),加或减移动到该部分的行数(0移动,0移动出).”

尝试通过将对象附加到数组中来找到重新加载表视图的平滑方式.

在reloadRowsAtIndexPaths起作用之前调用TheTableView.reloadData(),但是动画是毛刺的.还有另一种方法吗?

解决方法

为什么不直接重新加载单元格? indexPath包含部分和行,所以只需跟踪要重新加载的部分,并填充该数组中的索引.
var indexPath1 = NSIndexPath(forRow: 1,inSection: 1)
var indexPath2 = NSIndexPath(forRow: 1,inSection: 2)
self.tableView.reloadRowsAtIndexPaths([indexPath1,indexPath2],withRowAnimation: UITableViewRowAnimation.Automatic)

根据您的评论,您正在寻找更改阵列,并在更改中使tableView具有动画效果.如果是这种情况,您应该考虑对UITableViews使用beginUpdates()和endUpdates(),甚至使用NSFetchedResultsController,从而彻底处理所有的更新动画.

self.tableView.beginUpdates()
// Insert or delete rows
self.tableView.endUpdates()

如果您使用Core Data来简化整个过程,我建议使用NSFetchedResultsController.否则你必须自己处理更改.换句话说,如果您的数组更改,则需要使用beginUpdates()和endUpdates()手动删除或插入表中的行.
如果您没有使用核心数据,请学习this来掌握如何处理.

相关文章

当我们远离最新的 iOS 16 更新版本时,我们听到了困扰 Apple...
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只...
一般在接外包的时候, 通常第三方需要安装你的app进行测...
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应...