有没有办法重新加载具有动画的多个部分的特定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来掌握如何处理.