表格视图 - 显示像 - #Around Me - Google# - 在iPhone中

时间:2009-08-19 20:19:10

标签: iphone uitableview

我正在从网络服务中加载大约60到80个数据。

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

我想对我的应用程序实现相同的效果/逻辑,但不知道如何?

你会帮助我吗?

3 个答案:

答案 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自己的NSXMLParserThe 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中。