Reputation: 5101
I have implemented some code to add expandable/collapsable capabilities to my tableView sections. There can be from 0 to 6 sections, depends on core data objects.
I have updated the viewForHeaderInSection
method to include if clauses depending on section name. In the same method I am using a UIView with a button to expand or collapse the section rows. I have also updated the heightForRowAtIndexPath method to change the row height depending on the section selected to be expand/collapsed.
To test the app, I am only checking section 0 and section 1.
I put here the code for all implicated methods:
//viewForHeaderInSection method
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
static NSString *header = @"customHeader";
// UITableViewHeaderFooterView *vHeader;
id <NSFetchedResultsSectionInfo> theSection = [[self.fetchedResultsController sections] objectAtIndex:section];
NSString *tmp = [theSection name];
NSLog(@"SECTIONNAME = %@",tmp);
UIView *mView = [[UIView alloc]initWithFrame:CGRectMake(10.0f, 0.0f, 300.0f, 20.0f)];
[mView setBackgroundColor:[UIColor redColor]];
if ([tmp isEqualToString:@"0"]){
NSLog(@"HAS ENTRADO EN SECTION 0");
UIImageView *logoView = [[UIImageView alloc]initWithFrame:CGRectMake(285.0f, 2.0f,20.0f,20.0f)];
[logoView setImage:[UIImage imageNamed:@"leftarrow.png"]];
[mView addSubview:logoView];
UIButton *bt = [UIButton buttonWithType:UIButtonTypeCustom];
[bt setFrame:CGRectMake(20.0f, -4.0f, 150.0f, 30.0f)];
[bt setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
[bt setTag:0];
[bt.titleLabel setFont:[UIFont systemFontOfSize:15]];
[bt.titleLabel setTextAlignment:NSTextAlignmentNatural];
[bt.titleLabel setTextColor:[UIColor yellowColor]];
NSString *valor = [NSString stringWithFormat:@"OVERDUE (%d)", [self.tableView
numberOfRowsInSection:section]];
[bt setTitle:valor forState: UIControlStateNormal];
[bt addTarget:self action:@selector(addCell:) forControlEvents:UIControlEventTouchUpInside];
[mView addSubview:bt];
return mView;
}
if ([tmp isEqualToString:@"1"]){
NSLog(@"HAS ENTRADO EN SECTION 1");
UIView *mView = [[UIView alloc]initWithFrame:CGRectMake(10.0f, 0.0f, 300.0f, 20.0f)];
[mView setBackgroundColor:[UIColor orangeColor]];
UIImageView *logoView = [[UIImageView alloc]initWithFrame:CGRectMake(285.0f, 2.0f,20.0f,20.0f)];
[logoView setImage:[UIImage imageNamed:@"leftarrow.png"]];
[mView addSubview:logoView];
UIButton *bt = [UIButton buttonWithType:UIButtonTypeCustom];
[bt setFrame:CGRectMake(20.0f, -4.0f, 150.0f, 30.0f)];
[bt setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
NSLog(@"SECTION 1 EN SEGUNDA LECTURA");
[bt setTag:1];
[bt.titleLabel setFont:[UIFont systemFontOfSize:15]];
[bt.titleLabel setTextAlignment:NSTextAlignmentNatural];
[bt.titleLabel setTextColor:[UIColor yellowColor]];
NSString *valor = [NSString stringWithFormat:@"TODAY (%d)", [self.tableView
numberOfRowsInSection:section]];
[bt setTitle:valor forState: UIControlStateNormal];
[bt addTarget:self action:@selector(addCell1:) forControlEvents:UIControlEventTouchUpInside];
[mView addSubview:bt];
return mView;
}
return mView;
}
// heightForRowAtIndexPath method
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
if (indexPath.section == 0){
return heightOfSection0;NSLog(@"HAS PULSADO SECTION 0 CERRADA");
}
else {
return 50.0f;NSLog(@"HAS PULSADO SECTION 0 ABIERTA");
}
if (indexPath.section == 1){
return heightOfSection1;NSLog(@"HAS PULSADO SECTION 1 CERRADA");
}
else {
return 50.0f;NSLog(@"HAS PULSADO SECTION 0 ABIERTA");
}
}
And now the button action methods:
- (void)addCell:(UIButton *)bt{
// If section of more information
if(bt.tag == 0) {
NSLog(@"HAS PULSADO SECTION 0 EN ADDCELL");
// Initially more info is close, if more info is open
if(isSection0Open) {
// Set height of section
heightOfSection0 = 45.0f;
// Reset the parameter that more info is closed now
isSection0Open = NO;
}else if (isSection0Open==NO){
// Set height of section
heightOfSection0 = 0.0f;
// Reset the parameter that more info is closed now
isSection0Open = YES;
}
}
[self.tableView reloadData];
[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationFade];
}// end addCell
- (void)addCell1:(UIButton *)bt{
// If section of more information
if(bt.tag == 1) {
NSLog(@"HAS PULSADO SECTION 1 EN ADDCELL1");
// Initially more info is close, if more info is open
if(isSection1Open) {
// Set height of section
heightOfSection1 = 45.0f;
// Reset the parameter that more info is closed now
isSection1Open = NO;
}else if (isSection1Open==NO){
// Set height of section
heightOfSection1 = 0.0f;
// Reset the parameter that more info is closed now
isSection1Open = YES;
}
}
[self.tableView reloadData];
[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:1] withRowAnimation:UITableViewRowAnimationFade];
}// end addCell1
There is no issue at section 0, it expands and collapse as expected. The issue lies on section 1, and I guess that the same problem will happen when I would try to implement the same code for the rest of the sections...
Any help is welcome. Thank you.
Upvotes: 0
Views: 857
Reputation: 5101
I have detected my error, it was on the heightForRowAtIndexPath method. This is the right way to write it in my app:
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
if (indexPath.section == 0){
return heightOfSection0;
}
else if (indexPath.section == 1){
return heightOfSection1;
}
else {
return 45.0f;
}
}
That was. Thank you in any case.
Upvotes: 1