这是我的数组,我使用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,我希望这样设置为明智的行集。
答案 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]);
}
这是输出屏幕 -
答案 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
}
通过这种方式,您可以区分日期和心率,并使用表格视图委托和数据源。