在 UITableView 中进行分页的最佳方法
Posted
技术标签:
【中文标题】在 UITableView 中进行分页的最佳方法【英文标题】:Best way to do paging in UITableView 【发布时间】:2011-08-31 13:44:23 【问题描述】:我正在开发一个房地产应用程序。该应用程序在用户填写表单(最小房间、价格等)后查询数据馈送服务器,并获取一个带有特定键/值对(属性名称、属性地址、经度/纬度、价格等)的 json 字符串。 )。
我想要做的是允许用户浏览 UITableView 中的列表,即使提要包含一长串项目,而不必使用户 iphone 超载(在查询之前返回的项目计数是未知的完成,所以应用程序需要处理这个)...你会建议我分页吗?
提前谢谢,
斯蒂芬
【问题讨论】:
我在分页上找到的最佳实现:lwxted.com/blog/2012/smart-data-loading-table-views 【参考方案1】:如果您的tableView:cellForRowAtIndexPath:
方法使用dequeueReusableCellWithIdentifier:
正确编写(并且您不使用tableView:heightForRowAtIndexPath:
,或者它非常快),UITableView 应该能够处理数千行而不会使设备过载。您只需要关心原始数据的存储即可。
至于在查询完成之前不知道行数的问题,这很容易解决。当您从查询中收到更多行时,只需使用 UITableView 的 insertRowsAtIndexPaths:withRowAnimation:
通知表视图有更多行可用(并确保您的 tableView:numberOfRowsInSection:
和 tableView:cellForRowAtIndexPath:
将反映这些新行)。
如果您还想等到用户滚动到当前列表的末尾再继续查询,请注意 UITableView 是 UIScrollView 的子类,而 UITableViewDelegate 实现了 UIScrollViewDelegate。因此,只需在 UITableViewDelegate 上使用 scrollViewDidScroll:
即可了解用户何时滚动,然后检查表格视图的 contentOffset
以确定它们是否向下滚动到足以加载更多数据的程度。
【讨论】:
【参考方案2】:人们可以拥有的平均物品数量是多少? 10、100、1000?它有图像还是只有数据?一般来说,我会投票支持没有任何分页 - 向下滚动时加载更多,如果没有太多,请尝试在第一次加载所有页面。您还可以将它们缓存在设备上并添加“拉动刷新”功能,从而改善离线体验。
【讨论】:
每页 10 个项目,如果它在网页上并且它有图像要显示在表格单元格中 如前所述,我不知道总列表。例如,一个特定的搜索可能有 110 个项目,每个“页面”显示 10 个项目,它会显示 11 个“页面” 每页 10 个项目,如果它在网页上并且它有图像要显示在表格单元格中 在这种情况下,我只需将所有内容加载到一个表中,并且没有分页。【参考方案3】:如果有人对使用按钮进行分页感兴趣,那么我发现这篇文章很有用http://www.mindyourcode.com/ios/iphone/pagination-in-uitableview-with-next-previous-buttons/ 可能对其他人会有所帮助
【讨论】:
以上是关于在 UITableView 中进行分页的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章
使用带有mysql的spring MVC实现分页的最佳方法是啥
在存储库级别在 Doctrine2 ORM 中实现分页的最佳实践