2009-08-19 66 views
0

我正在从网络服务加载大约60到80个数据。表格视图 - 显示像 - #我周围 - 谷歌# - 在iPhone中

但是如果你看过“我身边 - 谷歌 - 应用” - >它有一个的tableView作为搜索结果 - >查看表最后一个单元格写成查看更多 - >在单击出现更多的数据

我想要实现同样的效果/逻辑,我的应用程序,但不知道怎么样?

你能帮我吗?

回答

2

阿维亚德本多夫和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自己NSXMLParserThe TouchXML library也是可用的,并且为轻度脏数据提供更强大的支持(比如真实世界的html,它通常不符合XML标准)。要解析JSON,您可以使用the json-framework,它具有非常简单的基于类别的界面。

+0

是否有充分的理由使用tableView:willSelectRowAtIndexPath:vs tableView:didSelectRowAtIndexPath:? – 2009-08-19 21:21:37

1

首先,你需要做分页您的应用程序。这意味着,不是您的Web服务返回所有项目,而是应该返回其中的一部分,方法是添加一个参数offset,即从何处开始获取结果,以及length,这意味着要获得多少结果。这意味着第一个电话将与0, 20,第二个20, 20,第三个40, 20等,如果你想每个“页”20项。

然后,添加一个可点击的项目到您的表视图。这可以是由委托返回的特殊部分,其中包含一行,单击该行时将调用下一页的Web服务,并通过更新后端数组和使用插入行消息将结果添加到表视图中。

1

您可以随时自定义您的tableview。例如,让我们说你只能显示25个项目。然后在numberOfRowsInSection函数中返回26,并在cellForRowAtrIndexPath中检查最后一行。如果它是最后一行,那么它的文本将是“查看更多”。

同样在selectedRowAtIndexPath您可以检查行计数,如果它是最后一个负载另一个25.请这将是1前25个和2接下来的25这样,你不必再retrive的数据整数索引并且可以将数据存储在NSMutableArray中。