为什么我的 [tableview reloadData] 执行得太晚?

发布于 2025-01-06 17:10:56 字数 958 浏览 2 评论 0原文

更改数据时我的表格视图发生了一些奇怪的事情。我有这样的想法:

// fadeout existing data
... // change data (new values for the cells are blank)
for{ // loop all rows
[TableView reloadRowsAtIndexPaths: withRowAnimation:]; // smooth fade out
}

// add one new row to the table
... // change data (just add one new row but leave the cells empty)
[TableView reloadData] // reload all of the data (new row should be added)

... // change data (just add values to the existing cells)
for{ // loop all rows
[TableView reloadRowsAtIndexPaths: withRowAnimation:]; // smooth fade in
}

理论上,至少我认为,这应该有效。但我遇到了一些小问题,所以我在 for 循环和: - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 中添加了 NSLogs,所以我注意到我的 [tableView reloadData] 在淡入循环的第一行之后执行!@#

我正在考虑在 reloadData 和淡入循环之间进行某种延迟,但我不想强迫它工作,我希望它能正常工作。

  • 有没有更好的方法来完成我想做的事情?
  • 我可以在表格底部动态添加一行而不调用“reloadData”方法吗?

谢谢。

Something weird is going on with my tableview when changing data. I have something like this:

// fadeout existing data
... // change data (new values for the cells are blank)
for{ // loop all rows
[TableView reloadRowsAtIndexPaths: withRowAnimation:]; // smooth fade out
}

// add one new row to the table
... // change data (just add one new row but leave the cells empty)
[TableView reloadData] // reload all of the data (new row should be added)

... // change data (just add values to the existing cells)
for{ // loop all rows
[TableView reloadRowsAtIndexPaths: withRowAnimation:]; // smooth fade in
}

In theory, at least what I think, this should work. But I had some glitches so I added NSLogs in the for loops and in the: - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath so I noticed that my [tableView reloadData] executes after the first row of fade in loop!@#

I was thinking about making some kind of a delay between reloadData and fade in loop, but I don't want to force it to work, I want it to work properly.

  • Is there a better way to accomplish what I'm trying to do?
  • Can I dynamically add one row at the bottom of the table without calling the 'reloadData' method?

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

匿名的好友 2025-01-13 17:10:56

是的,只需使用 tableView insertRowsAtIndexPaths 方法,然后该方法将调用您的 dataSource 来加载这些新行。

要在表末尾加载单行,您首先需要更新数据源以包含新行,然后使用以下方法生成索引路径:

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:[yourdata count]-1 inSection:0];
NSArray *indexPaths = [NSArray arrayWithObject:indexPath];
[tableView insertRowsAtIndexpaths:indexPaths withRowAnimation:whateveryouwant];

记住,这将立即调用您的 tableView:cellForRowAtIndexPath 方法,因此请更新您的 dataSource 以包含将新行插入到表中之前的额外行,并注意您指定的 indexPath 中的行索引与数据源中新添加的项目相匹配。

Yes, just use the tableView insertRowsAtIndexPaths method, which will then call your dataSource to load those new rows.

To load a single row at the end of your table, you'd first update your data source to include the new row, then generate the indexpath using:

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:[yourdata count]-1 inSection:0];
NSArray *indexPaths = [NSArray arrayWithObject:indexPath];
[tableView insertRowsAtIndexpaths:indexPaths withRowAnimation:whateveryouwant];

Remember, that will immediately call your tableView:cellForRowAtIndexPath method, so update your dataSource to include the extra row before inserting the new row into your table, and be careful that the row index in the indexPath you specify matches the newly added item in your data source.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文