【发布时间】:2013-04-04 18:36:05
【问题描述】:
我正在开发一个简单的 iPhone 应用程序,该应用程序正在从 UITableView 内的 Web 服务(RSS 提要)加载数据。第一次加载应用程序时,我使用初始值为 1 的计数器来加载提要的第一页:
- (void)viewDidLoad
{
[super viewDidLoad];
counter = 1;
[self fetchEntriesNew:counter];
}
当用户向下滚动到 tableview 的底部时,我正在使用以下方法通过递增计数器来获取 rss feed 的下一页来在 tableview 中加载更多数据:
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
float endScrolling = scrollView.contentOffset.y + scrollView.frame.size.height;
if (endScrolling >= scrollView.contentSize.height)
{
NSLog(@"Scroll End Called");
counter++;
[self fetchEntries:counter];
}
}
每次用户向下滚动到 tableview 的底部时,计数器都会增加,因此会调用 rss 提要的下一页。至此,一切正常。
但是,如果用户在到达底部后向上滚动多次,计数器也会多次递增,因此到达 rss 提要的不同页面并将其添加到 tableview 的底部。
更准确地说,如果用户已到达底部并向上滚动 3 次,则不会加载第二页,而是加载第四页(滚动 3 次加上开始时已添加 1)
如果之前的页面条目未加载,我如何限制不添加另一个页面条目?
请不要建议在 tableview 或任何第三方库(如 NMPaginator 和 PartialTable 等)底部处理更多行的替代策略。提前致谢!
更新:
我通过一次又一次地运行该应用程序来密切观察它。似乎如果用户在 tableview 完成加载已经请求的页面数据(包括图像)之前滚动到底部(增加计数器),它将忽略加载当前正在加载的页面并开始加载下一个基于递增的计数器。
【问题讨论】:
-
我看不出你建议的答案如何帮助解决我提出的问题
-
能否保留已加载的计数器列表?因此,每次调用 [self fetchEntries:counter] 时,计数器对象都会添加到列表中,并且您只加载未出现在该列表中的计数器。但更简单的解决方法是在用户向上滚动时减少计数器?
-
@JDx 1) 我已将计数器用于其他目的,计数器在应用程序运行之间为我提供了很好的服务,但在这种情况下,假设用户滚动两次,它会调用第二页,然后是第三页页面,然后加载第三页。所以柜台无法解决这个问题。 2)减少计数器只会显示已经加载的内容。
标签: ios objective-c uitableview uiscrollview