我正在开发iPhone应用程序,我一度陷入困境需要你的帮助,
我的tableview包含动态部分和每个部分中的动态no行。
这是我的json数据格式:http://pastebin.com/jmsq1pxu
我已经在我的数组中获取了所有这些数据,
现在我根据SpecGroupLabel
键计算了tableview中的节数:
我发现分段数为10
General,
Body,
Display,
Memory,
Camera,
Connectivity,
OS,
Processor,
Battery,
Sound
现在在每个部分中,我想计算没有行。
在这种情况下,第一部分为General
第二部分为Body
第三部分为Display
,依此类推至第10部分Sound
我想计算每个部分中的行数?
最后我应该如何在cellForRowAtIndexPath
中显示不同的部分及其行?
请提前帮助和致谢。
答案 0 :(得分:1)
组数:
NSInteger _numberOfGroups = [[_array valueForKeyPath:@"@distinctUnionOfObjects.SpecGroupLabel"] count];
特定群组中的项目数量(例如"General"
):
NSInteger _numberOfItemsInAGroup = [[_array filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(NSDictionary * evaluatedObject, NSDictionary *bindings) {
return [[evaluatedObject valueForKey:@"SpecGroupLabel"] isEqualToString:@"General"]; // or Body, Display, Memory, Camera, Connectivity, etc...
}]] count];
注意:您可以阅读更多about KVC here和predicates here。
答案 1 :(得分:1)
您需要创建一个数组数组。每个数组都代表一个部分。在每个数组中,为单个行添加数据。
获取部分中的行数:
NSInteger rows = array[section].count
在cellForRowAtIndexPath中使用索引路径
CustomObject *object = [array[indexPath.section] objectAtIndex:indexPath.row]
答案 2 :(得分:1)
我会详细解释
假设您有以下json {
数据:[ { 标签:水果, 名称:橙色, },
{
label:Month,
name: June,
},
{
label:Color,
name: Blue,
},
{
label:Color,
name: Red,
},
{
label:Fruit,
name: Apple,
},
{
label:Color,
name: Pink,
},
{
label:Fruit,
name: Mango,
},
{
label:Month,
name: May,
},
{
label:Color,
name: White,
},
] }
你希望你的桌子看起来像
<强>水果强>
橙
苹果
芒果
<强>月强>
六月
月
<强>颜色强>
蓝
红色
粉红色
白
NSMutableDictionary *dict;
- (void)viewDidLoad
{
[super viewDidLoad];
dict = [[NSMutableDictionary alloc] init];
NSArray *jsonArray ;// this is your data json array
for (int i = 0; i < jsonArray.count; i++) {
NSDictionary *dataDict = [jsonArray objectAtIndex:i];
NSString *getLabel = [dataDict objectForKey:@"label"];
if([dict objectForKey:getLabel] == NULL){
//this label is not present in your dict, so that means its a new section.
NSMutableArray *newArray = [[NSMutableArray alloc] init];
[newArray addObject:[dataDict objectForKey:@"name"]];
[dict setObject:newArray forKey:getLabel];
}else{
// already added to the dictionary
NSMutableArray *getArray = [dict objectForKey:getLabel];
[getArray addObject:[dataDict objectForKey:@"name"]];
}
}
// Do any additional setup after loading the view, typically from a nib.
}
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
return dict.count;
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
NSArray *getArray = [dict.allValues objectAtIndex:section];
return getArray.count;
}
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection: (NSInteger)section{
return 40.0;
}
-(UIView*) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 40.0)];
UILabel *sectionLabel = [[UILabel alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 40.0)];
sectionLabel.text = [dict.allKeys objectAtIndex:section];
[view addSubview:sectionLabel];
return view;
}
-(UITableViewCell*) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];
NSArray *getArray = [dict.allValues objectAtIndex:indexPath.section];
cell.textLabel.text = [getArray objectAtIndex:indexPath.row];
}