简体   繁体   中英

tableView expandable/collapsable sections, some sections do not expand/collapse

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.

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM