繁体   English   中英

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

[英]tableView expandable/collapsable sections, some sections do not expand/collapse

我已经实现了一些代码,以将可扩展/可折叠功能添加到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部分,我想当我尝试为其余部分实现相同的代码时也会发生相同的问题...

欢迎任何帮助。 谢谢。

我检测到我的错误,它是在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;
    }

}

是的 无论如何谢谢你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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