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

问题描述 投票:0回答:1

我搜索了很多,但找不到解决方案,有人可以指导我以下解决方案吗?

使用 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"
}

上面是示例数据,当我向上滚动时,对于水果,作为回报,我在使用分页时获得多条记录,这是正确完成的,并且数据在表格视图中正确显示所有可用记录,如上所示。

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

ios json objective-c uitableview
1个回答
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 这段代码只是为了给您一个基本的想法。

© www.soinside.com 2019 - 2024. All rights reserved.