我正在从网络服务加载大约60到80个数据。表格视图 - 显示像 - #我周围 - 谷歌# - 在iPhone中
但是如果你看过“我身边 - 谷歌 - 应用” - >它有一个的tableView作为搜索结果 - >查看表最后一个单元格写成查看更多 - >在单击出现更多的数据
我想要实现同样的效果/逻辑,我的应用程序,但不知道怎么样?
你能帮我吗?
我正在从网络服务加载大约60到80个数据。表格视图 - 显示像 - #我周围 - 谷歌# - 在iPhone中
但是如果你看过“我身边 - 谷歌 - 应用” - >它有一个的tableView作为搜索结果 - >查看表最后一个单元格写成查看更多 - >在单击出现更多的数据
我想要实现同样的效果/逻辑,我的应用程序,但不知道怎么样?
你能帮我吗?
阿维亚德本多夫和rkbang提供一些有用的建议。除此之外:
要响应“查看更多”单元格的触摸,请写tableView:willSelectRowAtIndexPath:
方法(来自UITableViewDelegate
协议),无论哪个对象是您的代表UITableView
的代表。在这种方法中,拨打电话,以装载更多的数据,并返回nil
所以该行不保持选定(这是比较类似按钮的行为):
- (NSIndexPath *)tableView:(UITableView *)tableView
willSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[self loadMoreData];
return nil; // Don't leave this row selected.
}
在您的负载功能,使服务器调用get数据,解析它,并重新加载表。这也是礼貌给繁忙的指标,而你等待服务器的回复:
#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 libraryHTTPHelper
。
如果你想解析XML,您可以使用SDK自己NSXMLParser
。 The TouchXML library也是可用的,并且为轻度脏数据提供更强大的支持(比如真实世界的html,它通常不符合XML标准)。要解析JSON,您可以使用the json-framework,它具有非常简单的基于类别的界面。
首先,你需要做分页您的应用程序。这意味着,不是您的Web服务返回所有项目,而是应该返回其中的一部分,方法是添加一个参数offset
,即从何处开始获取结果,以及length
,这意味着要获得多少结果。这意味着第一个电话将与0, 20
,第二个20, 20
,第三个40, 20
等,如果你想每个“页”20项。
然后,添加一个可点击的项目到您的表视图。这可以是由委托返回的特殊部分,其中包含一行,单击该行时将调用下一页的Web服务,并通过更新后端数组和使用插入行消息将结果添加到表视图中。
您可以随时自定义您的tableview。例如,让我们说你只能显示25个项目。然后在numberOfRowsInSection函数中返回26,并在cellForRowAtrIndexPath中检查最后一行。如果它是最后一行,那么它的文本将是“查看更多”。
同样在selectedRowAtIndexPath您可以检查行计数,如果它是最后一个负载另一个25.请这将是1前25个和2接下来的25这样,你不必再retrive的数据整数索引并且可以将数据存储在NSMutableArray中。
是否有充分的理由使用tableView:willSelectRowAtIndexPath:vs tableView:didSelectRowAtIndexPath:? – 2009-08-19 21:21:37