如何使用SectionHeaderTitle在TableView中设置数组?

时间:2016-07-09 10:02:49

标签: ios objective-c iphone nsarray

  

这是我的数组,我使用Section Wise在TableView中设置。这个数组是动态的,所以值是增加或减少。

     

在标题部分标题中设置日期

     

相同的日期值包含在一个部分中。

那么我用Table Section在表格中设置数据的TableView方法是什么。

({
    date = "2016-07-09 06:46:00 +0000";
    heartrate = 89;
},
    {
    date = "2016-07-07 06:46:00 +0000";
    heartrate = 88;
},
    {
    date = "2016-07-06 06:46:00 +0000";
    heartrate = 90;
},
    {
    date = "2016-07-09 06:46:00 +0000";
    heartrate = 102;
},
    {
    date = "2016-07-07 06:46:00 +0000";
    heartrate = 98;
},
    {
    date = "2016-07-07 06:46:00 +0000";
    heartrate = 97;
})
  

在这里我设置了Image,我希望这样设置为明智的行集。

enter image description here

4 个答案:

答案 0 :(得分:1)

尝试按照以下步骤操作(希望这可以解决您的问题) -

1-采取全球NSMutableArray resultArray ;

2-添加这些代码行(也可以使用动态数组大小) -

resultArray = [NSMutableArray new];

NSArray *groupsDate = [yourArray valueForKeyPath:@"@distinctUnionOfObjects.date"];
   // for sorted array- [[yourArray valueForKeyPath:@"@distinctUnionOfObjects.date"]sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];

for (NSString *groupDateValue in groupsDate)
{
    NSMutableDictionary *newDict = [NSMutableDictionary new];

    [newDict setObject:groupDateValue forKey:@"date"];

    NSArray *groupRate = [yourArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"date = %@", groupDateValue]];

    [newDict setObject:groupRate forKey:@"heartrate"];

    [resultArray addObject:newDict];
}

NSLog(@"result %@",resultArray);

现在添加tableView dataSource/Delegate种方法 -

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{

    return resultArray.count;

}

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

    NSArray *rowC=[[resultArray objectAtIndex:section]valueForKey:@"heartrate"];

    return rowC.count;

}
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{


    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.frame.size.width, 30)];

    UILabel *label1 = [[UILabel alloc] initWithFrame:CGRectMake(3, 0, tableView.frame.size.width/2-5, 30)];

    [label1 setFont:[UIFont fontWithName:@"HelveticaNeue-Medium" size:16]];

    [label1 setTextColor:[UIColor whiteColor]];

    [label1 setText:[self getDateFromString:[[resultArray valueForKey:@"date"]objectAtIndex:section]]];

    [label1 setTextAlignment:NSTextAlignmentLeft];

    [view addSubview:label1];

    [view setBackgroundColor:[UIColor darkGrayColor]];

    return view;

}

-(NSString *)getDateFromString:(NSString *)string
{

    NSString * dateString = [NSString stringWithFormat: @"%@",string];

    NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss +0000"];
    NSDate* myDate = [dateFormatter dateFromString:dateString];

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"dd MMM yyyy"];
    NSString *stringFromDate = [formatter stringFromDate:myDate];

    return stringFromDate;
}


-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];

        cell.textLabel.text=[NSString stringWithFormat:@"Heart Rate = %@",[[[[resultArray objectAtIndex:indexPath.section]valueForKey:@"heartrate"] valueForKey:@"heartrate"] objectAtIndex:indexPath.row]];

    cell.detailTextLabel.text=[NSString stringWithFormat:@"%@",[[[[resultArray objectAtIndex:indexPath.section]valueForKey:@"heartrate"] valueForKey:@"date"] objectAtIndex:indexPath.row]];


    return cell;

}

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{

NSLog(@"date=%@ and heartRate= %@",[[[[resultArray objectAtIndex:indexPath.section]valueForKey:@"heartrate"] valueForKey:@"date"] objectAtIndex:indexPath.row],[[[[resultArray objectAtIndex:indexPath.section]valueForKey:@"heartrate"] valueForKey:@"heartrate"] objectAtIndex:indexPath.row]);
}

这是输出屏幕 -

enter image description here

答案 1 :(得分:0)

1)首先,您必须为包含唯一值的节标题创建一个数组。您可以通过在数组内部相互比较值来实现您的唯一值。

2)第二件事你需要创建第二个数组,其中包含你的部分的字典。像第1部分有2行

3)然后你必须实现tableview数据源方法。

– tableView:cellForRowAtIndexPath: // required method

– tableView:numberOfRowsInSection: // required method

– numberOfSectionsInTableView:

– tableView:titleForHeaderInSection:

答案 2 :(得分:0)

我假设您已经在表格视图中添加了数据行。

使用以下功能进行剖面视图。

func numberOfSectionsInTableView(tableView: UITableView) -> Int{}

func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String?{}

默认情况下,这些功能用于在表格视图中显示部分。获取Date键(根据您的数据结构)并将其添加为剖面视图中的标题,并将心率添加到部分中的行。如果你不明白这一点,请告诉我,我会相应地修改我的答案:)

希望这会对你有所帮助。

答案 3 :(得分:0)

您可以使用以下方法区分两个数据i数组:

for(int i=0; i<[array count]; i++){
 NSDictionary *dic=array[i];
[dateArray addObject:[dic valueForKey:@"date"]]; //date array is mutable array
[heartRateArray addObject:[dic valueForKey:@"heartrate"]]; //mutable array
}

通过这种方式,您可以区分日期和心率,并使用表格视图委托和数据源。