如何重新加载UITableView以获取更多数据?

时间:2011-08-13 16:40:19

标签: iphone json uitableview

我有UITableView,我从JSON查询中填写。

我用私信填写它并且有效。

JSON查询具有“站点”属性,我可以在每个站点获得20个PM。 所以在开始时我得到了Site = 0并得到了20PMS,这些都是加载的。

现在我想拥有电子邮件应用程序中的功能(我相信我在那里看到了它):当你向下滚动并到达终点时(在我的应用程序到达下午20点),应用程序应该加载下一个20等等。

任何想法如何实现?

2 个答案:

答案 0 :(得分:0)

尝试

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return ([array count] + 1);
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;

待办事项

if([indexpath row] == [array count]) {
    [self loadPMForSite:([array count]/20-1)];
}

- (void)loadPMForSite:(int)siteNumber

加载新pms,然后重新加载tableview数据。

未经测试但应该起作用。可能包括拼写错误。

答案 1 :(得分:0)

Sideswipe的答案是一个良好的开端,但是当你获得接下来的20个项目时,你不想冻结UI。在最后一行的情况下,您应该在启动线程以实际获取数据时返回带有“正在加载...”的单元格和UIActivityIndi​​cator。当该线程完成时,它会向主线程发出信号,然后主线程可以重新加载数据。另外,在实际输入数据之前,请注意不要更改数组的大小(在后台线程中),因为如果[数组计数]太大,用户可能会遇到滚动超出最后一行的问题。

请参阅apple的示例:LazyTableImages

对于UIActivityIndi​​cator:

UIActivityIndicatorView * loading  = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(200, 20, 30, 30)];
[date setActivityIndicatorViewStyle:UIActivityIndicatorViewStyleGray];
[self.view addsubview:loading];
[loading startAnimating];