在TableView中为使用Paging接收的JSON数据添加标题标题

时间:2017-09-17 01:02:06

标签: ios objective-c json uitableview paging

我搜索了很多但我无法找到解决方案,有人可以指导我以下解决方案。

使用Paging for page1等接收的JSON数据。

"ErrorCode":null,
"Message":"Success",
"Data":[
{
  "ProductID":1,
  "ProductName" :"Mango",
  "ProductCategory" :"Fruits"
},
{
  "ProductID":2,
  "ProductName" :"Banana",
  "ProductCategory" :"Fruits"
},
{
  "ProductID":3,
  "ProductName" :"Fanta",
  "ProductCategory" :"Drinks"
},
{
  "ProductID":4,
  "ProductName" :"Pepsi",
  "ProductCategory" :"Drinks"
},
{
  "ProductID":5,
  "ProductName" :"Carrot",
  "ProductCategory" :"Vegetables"
}

以上是我滚动时水果的示例数据,作为回报,我在使用分页时得到多条记录,这是正确完成的,数据在tableview中正确显示所有可用的记录,如上所示。

我的要求是,我想显示每个产品类别的标题,其中标题将显示为水果,所有相关产品将显示在下面。如果我们一次性收到数据,我本可以做到这一点但是当我们使用分页时,我不确定我在json响应中收到的下一页数据是否会有另一个产品类别或相同。

请澄清我的问题是否不明确。我希望做过分页的人知道我在说什么。

提前致谢。

1 个答案:

答案 0 :(得分:1)

声明数据源,例如self.dataSourceDictionary = [NSMutableDictionary dictionary];并过滤您的响应,如下所示(responseDictionary保留JSON响应)

- (void)catagorizeData:(NSDictionary *)responseDictionary
{
    for (NSDictionary *productDictionary in [responseDictionary objectForKey:@"Data"]) {
        NSMutableArray *eachCategoryArray = [self.dataSourceDictionary objectForKey:[productDictionary objectForKey:@"productCategory"]];
        if (eachCategoryArray == nil) {
            eachCategoryArray = [NSMutableArray array];
            [eachCategoryArray addObject:productDictionary];
            [self.dataSourceDictionary setObject:eachCategoryArray forKey:[productDictionary objectForKey:@"productCategory"]];
        }else{
            [eachCategoryArray addObject:productDictionary];
        }
    }
}

每次获得分页响应时,请调用上面的方法。 现在显示已截取tableview的过滤数据,如下所示:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return [self.dataSourceDictionary count];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    NSString *key = [[self.dataSourceDictionary allKeys] objectAtIndex:section];
    return [[self.dataSourceDictionary objectForKey:key] count];
}

N.B这段代码只是为了给你一个基本的想法。