【发布时间】:2016-09-14 07:16:10
【问题描述】:
使用以下形式的响应响应:
{
"category_tree": [
{
"id": "1",
"name": "Electronics",
"parent_category_code": "0",
"status": "approved",
"language_id": "1",
"cat_code": "20160705014449-127001FfboIICtZe",
"ddate_time": "2016-07-05 01:44:49",
"sub_cat": [
{
"id": "3",
"name": "Mobile english en",
"parent_category_code": "20160705014449-127001FfboIICtZe",
"status": "approved",
"language_id": "1",
"cat_code": "20160705014604-1270010DFNU8bays",
"ddate_time": "2016-07-05 01:46:04",
"sub_sub_cat": [
{
"id": "9",
"name": "Motorola",
"parent_category_code": "20160705014604-1270010DFNU8bays",
"status": "approved",
"language_id": "1",
"cat_code": "20160705022145-127001EewzhgWG5Y1",
"ddate_time": "2016-07-05 02:21:45"
},
{
"id": "31",
"name": "apple",
"parent_category_code": "20160705014604-1270010DFNU8bays",
"status": "approved",
"language_id": "1",
"cat_code": "20160820125103-37106451660Cw9bmocor",
"ddate_time": "2016-08-20 12:51:03"
}
]
}
]
},
{
"id": "5",
"name": "Automotive",
"parent_category_code": "0",
"status": "approved",
"language_id": "1",
"cat_code": "20160705022124-127001OqNHlzDGHL",
"ddate_time": "2016-07-05 02:21:23",
"sub_cat": [
{
"id": "7",
"name": "Hydraulik",
"parent_category_code": "20160705022124-127001OqNHlzDGHL",
"status": "approved",
"language_id": "1",
"cat_code": "20160705022145-127001EewzhgWG5Y",
"ddate_time": "2016-07-05 02:21:45",
"sub_sub_cat": [
{
"id": "11",
"name": "Fluidic",
"parent_category_code": "20160705022145-127001EewzhgWG5Y",
"status": "approved",
"language_id": "1",
"cat_code": "20160705022145-127001EewzhgWG5Y2",
"ddate_time": "2016-07-05 02:21:45"
}
]
}
]
},
{
"id": "13",
"name": "Fashion",
"parent_category_code": "0",
"status": "approved",
"language_id": "1",
"cat_code": "20160705014449-127001FfboIICtZeF",
"ddate_time": "2016-07-05 01:44:49",
"sub_cat": [
{
"id": "17",
"name": "MEN",
"parent_category_code": "20160705014449-127001FfboIICtZeF",
"status": "approved",
"language_id": "1",
"cat_code": "20160812125126-1270011lllHsWx9H",
"ddate_time": "2016-08-12 12:51:26",
"sub_sub_cat": [
{
"id": "21",
"name": "Footware",
"parent_category_code": "20160812125126-1270011lllHsWx9H",
"status": "approved",
"language_id": "1",
"cat_code": "20160812125510-127001S8hVEJynOR",
"ddate_time": "2016-08-12 12:55:10"
},
{
"id": "23",
"name": "Partyware",
"parent_category_code": "20160812125126-1270011lllHsWx9H",
"status": "approved",
"language_id": "1",
"cat_code": "20160812010851-1270011LQhUSZgaN",
"ddate_time": "2016-08-12 01:08:51"
}
]
},
{
"id": "19",
"name": "WOMEN",
"parent_category_code": "20160705014449-127001FfboIICtZeF",
"status": "approved",
"language_id": "1",
"cat_code": "20160812125146-1270012tW7VrQH10",
"ddate_time": "2016-08-12 12:51:46",
"sub_sub_cat": [
{
"id": "27",
"name": "Partyware",
"parent_category_code": "20160812125146-1270012tW7VrQH10",
"status": "approved",
"language_id": "1",
"cat_code": "20160812012407-1270011ZU5fZUHcz",
"ddate_time": "2016-08-12 01:24:07"
},
{
"id": "29",
"name": "Nightware",
"parent_category_code": "20160812125146-1270012tW7VrQH10",
"status": "approved",
"language_id": "1",
"cat_code": "20160812012730-127001kpxQOh3oGP",
"ddate_time": "2016-08-12 01:27:30"
}
]
},
{
"id": "61",
"name": "Living Room",
"parent_category_code": "20160705014449-127001FfboIICtZeF",
"status": "approved",
"language_id": "1",
"cat_code": "20160825112226-180211107130NAoAdes7uY",
"ddate_time": "2016-08-25 11:22:26"
}
]
},
{
"id": "33",
"name": "food",
"parent_category_code": "0",
"status": "approved",
"language_id": "1",
"cat_code": "20160820125200-37106451661w1jVnnD78",
"ddate_time": "2016-08-20 12:52:00"
},
{
"id": "35",
"name": "Mobiles & Tablets",
"parent_category_code": "0",
"status": "approved",
"language_id": "1",
"cat_code": "20160825083005-18021110713003bgVwjLTJ",
"ddate_time": "2016-08-25 08:30:05"
},
{
"id": "37",
"name": "Men's Fashion",
"parent_category_code": "0",
"status": "approved",
"language_id": "1",
"cat_code": "20160825083757-1802111071301YBFaJXfga",
"ddate_time": "2016-08-25 08:37:56",
"sub_cat": [
{
"id": "49",
"name": "Shirts",
"parent_category_code": "20160825083757-1802111071301YBFaJXfga",
"status": "approved",
"language_id": "1",
"cat_code": "20160825110456-180211107130cMoRzTjkoc",
"ddate_time": "2016-08-25 11:04:56"
},
{
"id": "51",
"name": "Tshirts",
"parent_category_code": "20160825083757-1802111071301YBFaJXfga",
"status": "approved",
"language_id": "1",
"cat_code": "20160825110559-180211107130Hh5RpcYXm9",
"ddate_time": "2016-08-25 11:05:59"
},
{
"id": "53",
"name": "Men's Watches",
"parent_category_code": "20160825083757-1802111071301YBFaJXfga",
"status": "approved",
"language_id": "1",
"cat_code": "20160825110732-1802111071300RJEpM0Hfj",
"ddate_time": "2016-08-25 11:07:32"
}
]
},
{
"id": "39",
"name": "Motors",
"parent_category_code": "0",
"status": "approved",
"language_id": "1",
"cat_code": "20160825083827-18021110713000kPycVWfp",
"ddate_time": "2016-08-25 08:38:27"
},
{
"id": "41",
"name": "Home & Kitchen",
"parent_category_code": "0",
"status": "approved",
"language_id": "1",
"cat_code": "20160825083901-1802111071301eRlC0fDct",
"ddate_time": "2016-08-25 08:39:01",
"sub_cat": [
{
"id": "59",
"name": "Living Room",
"parent_category_code": "20160825083901-1802111071301eRlC0fDct",
"status": "approved",
"language_id": "1",
"cat_code": "20160825112047-1802111071301QjtsywNm6",
"ddate_time": "2016-08-25 11:20:47"
}
]
},
{
"id": "43",
"name": "Daily Needs",
"parent_category_code": "0",
"status": "approved",
"language_id": "1",
"cat_code": "20160825085534-1802111071301a3xWV7DRo",
"ddate_time": "2016-08-25 08:55:34",
"sub_cat": [
{
"id": "69",
"name": "Hair Oils",
"parent_category_code": "20160825085534-1802111071301a3xWV7DRo",
"status": "approved",
"language_id": "1",
"cat_code": "20160825113622-1802111071300TPLT5QVL9",
"ddate_time": "2016-08-25 11:36:22",
"sub_sub_cat": [
{
"id": "71",
"name": "soaps",
"parent_category_code": "20160825113622-1802111071300TPLT5QVL9",
"status": "approved",
"language_id": "1",
"cat_code": "20160825114003-1802111071300l6CNncEXE",
"ddate_time": "2016-08-25 11:40:03"
}
]
}
]
},
{
"id": "45",
"name": "Sports",
"parent_category_code": "0",
"status": "approved",
"language_id": "1",
"cat_code": "20160825085803-180211107130WR3tRcEEIy",
"ddate_time": "2016-08-25 08:58:03",
"sub_cat": [
{
"id": "55",
"name": "Cricket",
"parent_category_code": "20160825085803-180211107130WR3tRcEEIy",
"status": "approved",
"language_id": "1",
"cat_code": "20160825111232-180211107130ClhKEE0HRY",
"ddate_time": "2016-08-25 11:12:31",
"sub_sub_cat": [
{
"id": "63",
"name": "Bat",
"parent_category_code": "20160825111232-180211107130ClhKEE0HRY",
"status": "approved",
"language_id": "1",
"cat_code": "20160825112329-180211107130TCGNsByhHY",
"ddate_time": "2016-08-25 11:23:29"
},
{
"id": "65",
"name": "Ball",
"parent_category_code": "20160825111232-180211107130ClhKEE0HRY",
"status": "approved",
"language_id": "1",
"cat_code": "20160825112442-18021110713012uxH5Grol",
"ddate_time": "2016-08-25 11:24:41"
}
]
},
{
"id": "57",
"name": "Golf",
"parent_category_code": "20160825085803-180211107130WR3tRcEEIy",
"status": "approved",
"language_id": "1",
"cat_code": "20160825111407-180211107130GmoE48njSU",
"ddate_time": "2016-08-25 11:14:07"
}
]
},
{
"id": "47",
"name": "Toys",
"parent_category_code": "0",
"status": "approved",
"language_id": "1",
"cat_code": "20160825085931-18021110713002SmprXJw2",
"ddate_time": "2016-08-25 08:59:31"
}
]
}
我如何通过获取所有这些类别来扩展 tableview?
我已经成功地扩展了表格视图,所有这些项目在它的级别上都是正确的。
但我不知道如何为每个带有类别的单元格设置setIndentationLevel。
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [self.arForTable count];
}
// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] ;
}
cell.textLabel.text=[[self.arForTable objectAtIndex:indexPath.row] valueForKey:@"name"];
NSDictionary *d = [self.arForTable objectAtIndex:indexPath.row];
if (ForMainCat)
{
if ([d valueForKey:@"sub_cat"])
{
cell.accessoryView = [[ UIImageView alloc ] initWithImage:[UIImage imageNamed:@"Plus.png"]];
[cell.accessoryView setFrame:CGRectMake(0, 0, 20, 20)];
[cell setIndentationLevel:0];
}
}
if (ForSubCat)
{
if ([d valueForKey:@"sub_sub_cat"])
{
cell.accessoryView = [[ UIImageView alloc ] initWithImage:[UIImage imageNamed:@"Plus.png"]];
[cell.accessoryView setFrame:CGRectMake(0, 0, 20, 20)];
[cell setIndentationLevel:1];
}
}
if (ForSubSubCat)
{
[cell setIndentationLevel:2];
}
/*if ([d valueForKey:@"sub_cat"])
{
cell.accessoryView = [[ UIImageView alloc ] initWithImage:[UIImage imageNamed:@"Plus.png"]];
[cell.accessoryView setFrame:CGRectMake(0, 0, 20, 20)];
[cell setIndentationLevel:0];
}
else if ([d valueForKey:@"sub_sub_cat"])
{
cell.accessoryView = [[ UIImageView alloc ] initWithImage:[UIImage imageNamed:@"Plus.png"]];
[cell.accessoryView setFrame:CGRectMake(0, 0, 20, 20)];
[cell setIndentationLevel:1];
}
else if ([d ])
{
[cell setIndentationLevel:2];
}*/
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[tableView deselectRowAtIndexPath:indexPath animated:YES];
NSDictionary *d = [self.arForTable objectAtIndex:indexPath.row];
if (ForMainCat)
{
ForSubCat = true;
ForSubSubCat = false;
ForMainCat = false;
NSArray *ar=[d valueForKey:@"sub_cat"];
[self MaximizeThisRows:ar :indexPath];
}
if(ForSubCat)
{
ForMainCat = false;
ForSubSubCat = true;
ForSubCat = false;
NSArray *ar=[d valueForKey:@"sub_sub_cat"];
[self MaximizeThisRows:ar :indexPath];
}
else if (ForSubSubCat)
{
ForMainCat = false;
ForSubCat = false;
ForSubSubCat = true;
NSArray *ar=[d valueForKey:@"sub_sub_cat"];
[self MaximizeThisRows:ar :indexPath];
}
}
#pragma mark - Open SUb Cell
-(void)MaximizeThisRows : (NSArray*)ar :(NSIndexPath*)indexPath
{
UITableViewCell *cell = [self.subCatTbl cellForRowAtIndexPath:indexPath];
BOOL isAlreadyInserted=NO;
for(NSDictionary *dInner in ar)
{
NSInteger index=[self.arForTable indexOfObjectIdenticalTo:dInner];
isAlreadyInserted=(index>0 && index!=NSIntegerMax);
if(isAlreadyInserted) break;
}
if(isAlreadyInserted)
{
[self miniMizeThisRows:ar];
cell.accessoryView = [[ UIImageView alloc ] initWithImage:[UIImage imageNamed:@"Plus.png"]];
[cell.accessoryView setFrame:CGRectMake(0, 0, 20, 20)];
}
else
{
NSUInteger count=indexPath.row+1;
NSMutableArray *arCells=[NSMutableArray array];
for(NSDictionary *dInner in ar )
{
[arCells addObject:[NSIndexPath indexPathForRow:count inSection:0]];
[self.arForTable insertObject:dInner atIndex:count++];
cell.accessoryView = [[ UIImageView alloc ] initWithImage:[UIImage imageNamed:@"Minus.png"]];
[cell.accessoryView setFrame:CGRectMake(0, 0, 20, 20)];
}
[self.subCatTbl insertRowsAtIndexPaths:arCells withRowAnimation:UITableViewRowAnimationAutomatic];
}
}
#pragma mark - Close Sub Cell
-(void)miniMizeThisRows:(NSArray*)ar
{
for(NSDictionary *dInner in ar)
{
NSUInteger indexToRemove=[self.arForTable indexOfObjectIdenticalTo:dInner];
NSArray *arInner;
if ([dInner valueForKey:@"sub_cat"])
{
arInner=[dInner valueForKey:@"sub_cat"];
}
else
{
arInner=[dInner valueForKey:@"sub_sub_cat"];
}
if(arInner && [arInner count]>0)
{
[self miniMizeThisRows:arInner];
}
if([self.arForTable indexOfObjectIdenticalTo:dInner]!=NSNotFound)
{
[self.arForTable removeObjectIdenticalTo:dInner];
[self.subCatTbl deleteRowsAtIndexPaths:[NSArray arrayWithObject:
[NSIndexPath indexPathForRow:indexToRemove inSection:0]]
withRowAnimation:UITableViewRowAnimationAutomatic];
}
}
}
#pragma mark - Get Category list
-(void)getCategory
{
//http://180.211.107.130:8080/mahlati/api/apicall/get_category_tree
NSString *setUrl = [NSString stringWithFormat:@"%@get_category_tree",webUrl;
NSString *languageId = [[[Defualt valueForKey:@"AppleLanguages"]objectAtIndex:0] isEqualToString:@"en"] || [[[Defualt valueForKey:@"AppleLanguages"]objectAtIndex:0] isEqualToString:@"en-US"]? @"1" : @"2";
NSMutableDictionary *parameters = [[NSMutableDictionary alloc]initWithObjectsAndKeys:languageId ,@"language_id",nil];
[singletone requestPostUrlWithImage:setUrl parameters:parameters image:nil success:^(id _Nullable responce)
{
NSArray *objects = [responce allValues];
NSString *DBPath = [[singletone sharedManager]documentsPathForFileName:@"data.plist"];
NSError *writeError;
NSData *plistData = [NSPropertyListSerialization dataWithPropertyList:objects format:NSPropertyListXMLFormat_v1_0 options:NSPropertyListImmutable error:&writeError];
if(DBPath)
{
[plistData writeToFile:DBPath atomically:YES];
}
else
{
NSLog(@"Error in saveData: %@",writeError);
}
//Save to bundle
NSFileManager *fileManager = [NSFileManager defaultManager];
NSString *fromPath = [[NSBundle mainBundle]pathForResource:@"data" ofType:@"plist"];
[fileManager copyItemAtPath:fromPath toPath:DBPath error:nil];
//Retrive
NSArray *dtemp = [[NSArray alloc]initWithContentsOfFile:fromPath];
self.arrayOriginal = [dtemp objectAtIndex:0];
self.arForTable = [[NSMutableArray alloc] init];
[self.arForTable addObjectsFromArray:self.arrayOriginal];
[self.subCatTbl reloadData];
}
failure:^(NSError * _Nullable error)
{
NSLog(@"%@",error);
}];
}
【问题讨论】:
-
你的
dataStructure是什么样的? -
我的意思是
dataStructure用于存储已解析的json数据,您在tableViewDataSource中使用该数据 -
我将 json 响应存储在 plist 文件中
标签: ios objective-c json uitableview