UITableView 通过 JSON 更新,动画行插入

Posted

技术标签:

【中文标题】UITableView 通过 JSON 更新,动画行插入【英文标题】:UITableView update via JSON, animate Row insertion 【发布时间】:2010-02-08 20:11:53 【问题描述】:

我有一个通过 JSON 加载的 UITableView。所以我的逻辑是这样的:

    获取 JSON(NSOperation,回调主线程) 在回调中,解析 json,并将新数据插入到我的表的数据源数组中。 在 TableView 上调用 reloadData 以显示新数据。

我的问题是:如何动画化表中新行的到来?现在我只是让它们同时出现,我想做的是让它们动画到位,因为这样看起来更酷。

我想我想要的是使用:

 [self.theTableView insertRowsAtIndexPaths:insertIndexPaths withRowAnimation:UITableViewRowAnimationRight];

但这让我在运行时抱怨更新的大小与数据源中的大小不同。

我是否遗漏了有关如何使用该方法的内容?有谁知道有人通过这种模式将新行动画化到 TableView 中的示例?

更新:基本上,感谢 Ben 的指导,我通过以下方法解决了这个问题:

    从 [self.theTableView beginUpdates] 开始; 当我循环遍历 JSON 中的条目时,将它们插入到数组的开头,每次循环都会增加它们的索引。

    每次循环调用 insertRowsAtIndexPath,如下所示:

    NSIndexPath *indexPath; indexPath = [NSIndexPath indexPathForRow:[self.theChatEntries indexOfObject:message] inSection:0]; [self.theTableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:NO];

    以循环外的 endUpdates 结束。

呜呜呜。

【问题讨论】:

【参考方案1】:

你在正确的轨道上;您需要使用 [self.theTableView beginUpdates] 和 [self.theTableView endUpdates] 包装对 -insertRowsAtIndexPaths:withRowAnimation: 的调用。

【讨论】:

我试过了,但是当我从 JSON 获取第一行时,它崩溃了:'无效更新:第 0 节中的行数无效。之后现有节中包含的行数更新 (1) 必须等于更新之前该节中包含的行数 (0),加上或减去从该节插入或删除的行数(0 插入,0 删除)。' 接受引导我走上正轨。为后代更新问题。谢谢!

以上是关于UITableView 通过 JSON 更新,动画行插入的主要内容,如果未能解决你的问题,请参考以下文章

UITableView 在同一批次更新中重新加载和移动行导致“尝试为单元格创建两个动画”

滚动时取消 UITableView 中的动画

滑动删除 UITableView 单元格动画在 swift 2 中不起作用

较小的 JSON 响应后更新 UITableView 时出错?

Json数据在uitableview ios中没有更新?

动画将新行插入 UITableView 的新部分