我正在从网络服务中加载大约60到80个数据。
但是如果你看过“我身边 - 谷歌 - 应用程序” - >它有一个tableView作为搜索结果 - >在表中查看最后一个单元格被写为视图更多 - >点击后会出现更多数据
我想对我的应用程序实现相同的效果/逻辑,但不知道如何?
你会帮助我吗?
答案 0 :(得分:2)
Aviad Ben Dov和rkbang提供了一些有用的建议。除此之外:
要回复“查看更多”单元格,请在UITableViewDelegate
的代理人的任何对象中编写tableView:willSelectRowAtIndexPath:
方法(来自UITableView
协议)。在此方法中,调用以加载更多数据,并返回nil
,以便该行不会保持选中状态(这更像按钮的行为):
- (NSIndexPath *)tableView:(UITableView *)tableView
willSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[self loadMoreData];
return nil; // Don't leave this row selected.
}
在加载函数中,进行服务器调用以获取数据,解析数据并重新加载表。在等待服务器回复时给出忙碌指示符也是礼貌的:
#import "HTTPHelper.h"
// ... later ...
- (void) loadMoreData {
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
NSString* dataStr = nil;
NSError* error = [[HTTPHelper sharedInstance]
synchronousGetURLAsString:@"http://server.com/mystuff"
replyData:&dataStr];
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
if (error) {
[self displayErrorMessage:error];
} else {
[self parseIntoDataSource:dataStr];
[tableView reloadData];
}
}
在最后一个函数中,我假设方法parseIntoDataSource
将解析服务器回复并将该数据添加到您的类用于提供tableView:cellForRowAtIndexPath:
给出的表格单元格数据的任何内容中方法(UITableViewDataSource
协议)。
该代码还使用the moriarty library中的HTTPHelper
。
如果要解析XML,可以使用SDK自己的NSXMLParser
。 The TouchXML library也可用,并且为稍微脏的数据提供了更强大的支持(例如现实世界的html,它通常不符合XML标准)。要解析JSON,您可以使用the json-framework,它具有非常简单的基于类别的界面。
答案 1 :(得分:1)
首先,您需要在应用程序中进行分页。这意味着,代替您的Web服务返回所有项目,它应该只返回其中一些项目,方法是添加offset
参数,意味着从哪里开始获取结果,以及length
,这意味着有多少结果要得到。这意味着第一次调用将使用0, 20
,第二次使用20, 20
,第三次使用40, 20
等,如果您每个“页面”需要20个项目。
然后,将可点击的项目添加到表格视图中。这可以是您的委托返回的特殊部分,其中包含单个行,单击该行时,将调用Web服务以进行下一页,并通过更新后端数组和使用插入行消息将结果添加到表视图中。
答案 2 :(得分:1)
您可以随时自定义您的桌面视图。例如,假设您只显示25个项目。然后在numberOfRowsInSection函数中返回26并在和cellForRowAtrIndexPath中检查最后一行。如果它是最后一行,那么它的文本将是“查看更多”。
类似地,在selectedRowAtIndexPath中,您可以检查行计数,如果它是最后一次加载另外25个。保留一个整数索引,前25个为2,下一个25为2.这样您就不必再次检索数据了再次,您可以将数据存储在NSMutableArray中。