tableView可扩展/可折叠部分,某些部分不展开/折叠

时间:2014-01-24 00:29:54

标签: ios uitableview

我已经实现了一些代码来为我的tableView部分添加可扩展/可折叠功能。可以有0到6个部分,取决于核心数据对象。 我已更新viewForHeaderInSection方法,以根据部分名称包含if子句。在同一方法中,我使用带有按钮的UIView来展开或折叠节行。我还更新了heightForRowAtIndexPath方法,以根据选择要展开/折叠的部分更改行高。

要测试应用程序,我只检查第0部分和第1部分。

我在这里列出了所有牵连方法的代码:

//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");
    }
   }

现在按钮动作方法:

- (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

第0部分没有问题,它会按预期展开和折叠。问题出在第1部分,我想当我尝试为其余部分实现相同的代码时会发生同样的问题......

欢迎任何帮助。 谢谢。

1 个答案:

答案 0 :(得分:1)

我检测到了我的错误,它位于heightForRowAtIndexPath方法上。这是在我的应用程序中编写它的正确方法:

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{


    if (indexPath.section == 0){

        return heightOfSection0;
    }
   else if (indexPath.section == 1){


       return heightOfSection1;
    }
    else {
        return 45.0f;
    }

}
那是的。无论如何,谢谢你。