iOS 展开和折叠UITableViewCells

示例

在情节提要中,在UIViewController上添加一个UITableView对象,并使其覆盖整个视图。设置UITableviewDataSource和UITableviewDelegate连接。

目标C

在您的.h档案中

NSMutableArray *arrayForBool;

NSMutableArray *sectionTitleArray;

在您的.m档案中

- (void)viewDidLoad  {

    [super viewDidLoad];

    arrayForBool = [[NSMutableArray alloc] init];

    sectionTitleArray = @[@"Sam",@"Sanju",@"John",@"Staffy"];

           

    for (int i=0; i<[sectionTitleArray count]; i++) {

        [arrayForBool addObject:[NSNumber numberWithBool:NO]];

    }

    _tableView.dataSource = self;

    _tableView.delegate = self;

}  

 // 声明节中的行数

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

     if ([[arrayForBool objectAtIndex:section] boolValue]) {

         return section+2;

    } else {

         return 0; 

    }

}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

 

static NSString *cellid=@"hello";

UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:cellid];

if (cell==nil) {

    cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellid];

}

   BOOL manyCells  = [[arrayForBool objectAtIndex:indexPath.section] boolValue];

         /** If the section supposed to be closed******/

    if(!manyCells){

        cell.backgroundColor=[UIColor clearColor];   

        cell.textLabel.text=@"";

    }

      /** If the section supposed to be Opened******/

    else{

        cell.textLabel.text=[NSString stringWithFormat:@"%@ %d",[sectionTitleArray objectAtIndex:indexPath.section],indexPath.row+1];

        cell.backgroundColor=[UIColor whiteColor];

        cell.selectionStyle=UITableViewCellSelectionStyleNone ;

    }

cell.textLabel.textColor=[UIColor blackColor];

 /** Add a custom Separator with cell*/

  UIView* separatorLineView = [[UIView alloc]initWithFrame:CGRectMake(15, 40, _expandableTableView.frame.size.width-15, 1)];

separatorLineView.backgroundColor = [UIColor blackColor];

[cell.contentView addSubview:separatorLineView];

return cell;

}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

{

return [sectionTitleArray count];

}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath  *)indexPath

{

/*************** Close the section, once the data is selected ***********************************/

[arrayForBool replaceObjectAtIndex:indexPath.section withObject:[NSNumber numberWithBool:NO]];

 [_expandableTableView reloadSections:[NSIndexSet indexSetWithIndex:indexPath.section] withRowAnimation:UITableViewRowAnimationAutomatic];

 }

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

{

if ([[arrayForBool objectAtIndex:indexPath.section] boolValue]) {

    return 40;

}

return 0;

   }

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section

{

UIView *sectionView=[[UIView alloc]initWithFrame:CGRectMake(0, 0, 280,40)];

sectionView.tag=section;

UILabel *viewLabel=[[UILabel alloc]initWithFrame:CGRectMake(10, 0, _expandableTableView.frame.size.width-10, 40)];

viewLabel.backgroundColor=[UIColor clearColor];

viewLabel.textColor=[UIColor blackColor];

viewLabel.font=[UIFont systemFontOfSize:15];

viewLabel.text=[NSString stringWithFormat:@"List of %@",[sectionTitleArray objectAtIndex:section]];

[sectionView addSubview:viewLabel];

         /********** Add a custom Separator with Section view *******************/

UIView* separatorLineView = [[UIView alloc] initWithFrame:CGRectMake(15, 40, _expandableTableView.frame.size.width-15, 1)];

separatorLineView.backgroundColor = [UIColor blackColor];

[sectionView addSubview:separatorLineView];

/********** Add UITapGestureRecognizer to SectionView   **************/

UITapGestureRecognizer  *headerTapped   = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(sectionHeaderTapped:)];

[sectionView addGestureRecognizer:headerTapped];

return  sectionView;

}

- (void)sectionHeaderTapped:(UITapGestureRecognizer *)gestureRecognizer{

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:gestureRecognizer.view.tag];

if (indexPath.row == 0) {

    BOOL collapsed  = [[arrayForBool objectAtIndex:indexPath.section] boolValue];

    for (int i=0; i<[sectionTitleArray count]; i++) {

        if (indexPath.section==i) {

            [arrayForBool replaceObjectAtIndex:i withObject:[NSNumber numberWithBool:!collapsed]];

        }

    }

    [_expandableTableView reloadSections:[NSIndexSet indexSetWithIndex:gestureRecognizer.view.tag] withRowAnimation:UITableViewRowAnimationAutomatic];

    

   }

 }

           

以上是 iOS 展开和折叠UITableViewCells 的全部内容, 来源链接: utcz.com/z/351356.html

回到顶部