如何计算每个部分中的动态no行数

时间:2014-08-13 11:31:28

标签: ios objective-c uitableview

我正在开发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中显示不同的部分及其行?

请提前帮助和致谢。

3 个答案:

答案 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 herepredicates 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];

}