将 JSON 元素放入 TableView 作为 Sections Title 和 Cell title

Posted

技术标签:

【中文标题】将 JSON 元素放入 TableView 作为 Sections Title 和 Cell title【英文标题】:Put JSON elements in TableView as Sections Title and Cell title 【发布时间】:2016-12-17 11:38:44 【问题描述】:

下面是JSON,需要把它放在表格视图中,这样“subitemname”就变成了section标题,“subtosubitemname”变成了cell的标题。 我正在尝试,但没有成功。

部分标题已就位,但未检索行标题。

这是我试过的代码。

- (void)viewDidLoad 

[super viewDidLoad];

 NSString *urlString = [NSString stringWithFormat:@"URL"];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:urlString]];
[request setHTTPMethod:@"GET"];
NSError *error;
NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSString *str=[[NSString alloc]initWithData:returnData encoding:NSUTF8StringEncoding];
NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:[str dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingMutableContainers error:&error];
NSArray *DATAA=[jsonDict objectForKey:@"Menu"];

subid=[DATAA valueForKey:@"subitemid"];
subname=[DATAA valueForKey:@"subitemname"];

NSArray *sub= [DATAA valueForKey:@"Submenu"];

_SubItemName=[sub valueForKey:@"subtosubitemname"];
_SubItemId=[sub valueForKey:@"subtosubitemid"];



#pragma mark - Table view data source
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
    return [subname objectAtIndex:section];    


- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 

return [subid count];


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 

return [_SubItemId count];


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    cell=[tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
NSArray *subn=[_SubItemName objectAtIndex:indexPath.section];

cell.textLabel.text=[subn objectAtIndex:indexPath.row];
   return cell;

其中 subname 是具有“subitemname”对象的数组,_SubItemName 是具有“subtosubitemname”对象的数组。

 "Menu":    
           ["subitemid":1,
            "itemid":1,
           "subitemname":"TELEVISIONS",
           "ordernum":1,
           "Submenu":
     [
         "subitemid":1,
         "subtosubitemid":1,
         "itemid":1,
         "subtosubitemname":"FULL HD TV",
     
         "subitemid":1,
         "subtosubitemid":2,
         "itemid":1,
         "subtosubitemname":"SMART TV"
    
   ]
   ,
   
       "subitemid":2,
       "itemid":1,
       "subitemname":"AUDIO & VIDEO",
       "ordernum":2,
       "Submenu":
    [
       "subitemid":2,
       "subtosubitemid":3,
       "itemid":1,
       "subtosubitemname":"HOME AUDIO SYSTEMS"
     ,
    
       "subitemid":2,
       "subtosubitemid":4,
       "itemid":1,
       "subtosubitemname":"DTH SERVICES"
    ,
    
      "subitemid":2,
      "subtosubitemid":5,
      "itemid":1,
      "subtosubitemname":"AUDIO & VIDEO ACCESSORIES"
    ,
    
     "subitemid":2,
     "subtosubitemid":11,
     "itemid":1,
     "subtosubitemname":"PROJECTORS"
   
  ]
  ,
  
     "subitemid":3,
    "itemid":1,
    "subitemname":"LARGE APPLIANCES",
    "ordernum":3,

    "Submenu":
  [
  
     "subitemid":3,
"subtosubitemid":14,
"itemid":1,
"subtosubitemname":"WASHING MACHINES & DRYERS"
 ,

 "subitemid":3,
"subtosubitemid":16,
"itemid":1,
"subtosubitemname":"AIR CONDITIONERS"
,

"subitemid":3,
"subtosubitemid":18,
"itemid":1,
"subtosubitemname":"REFRIGERATORS"
,

"subitemid":3,
"subtosubitemid":19,
"itemid":1,
"subtosubitemname":"INVERTERS & BATTERIES"
]]

【问题讨论】:

显示您将 json 响应转换为 nsarray 的代码在哪里? @HimanshuMoradiya 我添加了代码 @Shikha 第一件事...永远不要以大写字母开头您的变量名.. 现在解决您的问题.. 一个数组就足够了,即.. menu=[jsonDict objectForKey:@"Menu"]; 将此数组用于您的所有方法喜欢numberOfSectionsInTableView。它应该是 [menu count] 与其他方法一样 @EICaptainv2.0 以及在 cellForRowAtIndexPath 中做什么? @Shikha 如果您理解我在之前的评论中所说的话,这很简单......只需使用menu[indexPath.section][@"Submenu"][indexPath.row][@"subtosubitemname"],您还需要更改其他 tableview 方法来实现这一点 【参考方案1】:
NSMutableArray *menuData = [jsonDict objectForKey:@"Menu"];

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
        return [[menuData objectAtIndex:section] objectForKey:@"subitemname"];


- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
       return [menuData count];


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
        NSArray *subMenuData = [[menuData objectAtIndex:section] objectForKey:@"Submenu"];
        return [subMenuData count];


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
       cell=[tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
       NSDictionary *cellData = [[[menuData objectAtIndex:section] objectForKey:@"Submenu"] objectAtIndex:indexPath.row];
      cell.textLabel.text=[cellData objectForKey:@"subtosubitemname"];
      return cell;

希望这对你有用。

【讨论】:

这行 NSDictionary *cellData = [[[menuData objectAtIndex:section] objectForKey:@"Submenu"] objectAtIndex:indexPath.row]; put NSDictionary *cellData = [[[menuData objectAtIndex:indexPath.section] objectForKey:@"Submenu"] objectAtIndex:indexPath.row];【参考方案2】:

试试这个……一个数组就够了……menu = [jsonDict objectForKey:@"Menu"];

 - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section 
    return menu[indexPath.section][@"subitemname"];    


- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
     return [menu count];


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
     NSArray *submenu = menu[indexPath.section][@"Submenu"];
     return [submenu count];


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    cell=[tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
    NSArray *submenu = menu[indexPath.section][@"Submenu"];
    cell.textLabel.text = submenu[indexPath.row][@"subtosu‌​bitemname]";
    return cell;

【讨论】:

以上是关于将 JSON 元素放入 TableView 作为 Sections Title 和 Cell title的主要内容,如果未能解决你的问题,请参考以下文章

将我的 JSON 放入 tableView

如何将 JSON 获取到 Swift 到 tableView 作为部分和行?

JSON到Tableview [重复]

将 JSON 元素放入数组中

将 JSON 解析为 TableView xcode 6.0.1,iOS8

将这个json文件作为数据框放入R中