【问题标题】:What is More reliable way to reload UITableView Data?重新加载 UITableView 数据的更可靠方法是什么?
【发布时间】:2015-01-10 15:05:12
【问题描述】:

我找到了 2 个函数来重新加载我的 UITableView 行

第一个。

    [tableView reloadRowsAtIndexPaths:[tableView indexPathsForVisibleRows] 
                 withRowAnimation:UITableViewRowAnimationNone];

第二。

    [tableView reloadData];

什么是更具体的重新加载 UITableView 数据的方法

【问题讨论】:

  • 答案取决于您之前对数据源所做的更改。 reloadData 将始终有效,但可能是矫枉过正。仅重新加载可见行可能会起作用,否则应用程序可能会崩溃。

标签: ios objective-c uitableview


【解决方案1】:

两者都是“可靠的”并且可能是“特定的”(取决于您所说的特定)——事实上,还有更多方法:

reloadData
reloadRowsAtIndexPaths:withRowAnimation:
reloadSections:withRowAnimation:
reloadSectionIndexTitles

查看开发人员文档 (https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITableView_Class/index.html) 了解差异,但简短的回答是它们都是可靠的——这仅取决于您要重新加载多少信息,以及是否要使用动画来完成。

例如,如果您只想重新加载某些行,您可以使用reloadRowsAtIndexPaths:withRowAnimation:。如果要重新加载整个部分,请使用reloadSections:withRowAnimation:

【讨论】:

  • 这意味着唯一的区别是我的第一个函数用动画重新加载它,而第二个没有。
  • 不,reloadData 将重新加载所有行(只有可见的行会在调用时重新显示)。 reloadRowsAtIndexPaths:[tableView indexPathsForVisibleRows] 只重新加载可见的单元格——不可见的单元格将不会重新加载
  • 不,这是不正确的,我对其进行了测试,并且 reloadData 仅重新加载可见单元格及其部分。而 reloadRowsAtIndexPaths: 只重新加载可见单元格,甚至不重新加载其部分。
  • 来自我为reloadData 链接的文档:调用此方法以重新加载用于构建表格的所有数据,包括单元格、节页眉和页脚、索引数组等。是的,这对于 reloadRowsAtIndexPaths: 是正确的,假设您要传递它 [tableView indexPathsForVisibleRows] - 请记住,您可以传递其他值。
【解决方案2】:

这个答案可能有两种情况,

a) 您的表格至少包含一个部分(带有标题或返回部分视图)

  • 在这种情况下,如果您调用reloadData,那么它也会重新加载部分。但reloadRowsAtIndexPaths:withRowAnimation: 只会重新加载可见单元格而不是该部分。

b) 您的表格至少包含一个部分(没有标题或返回部分视图)

  • 在这种情况下,如果您调用 reloadDatareloadRowsAtIndexPaths:withRowAnimation: 两者都将仅重新加载可见单元格。

那么哪个更好呢?

  • 正如我所解释的,根据具体情况,您应该调用一种方法中的任何一种。如果您有不想重新加载的部分,那么您应该调用reloadRowsAtIndexPaths:withRowAnimation: 方法。或者,如果您想与部分一起重新加载单元格,则应调用 reloadData 方法。

【讨论】:

  • 我确实知道它是如何工作的,但是对于更具体的方法存在一些小的困惑。你明白了我的意思,谢谢你的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 2020-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多