[iOS] Folding cells


foreword

The folding cell control was used in 3GShare during the summer vacation, hereby summarize the blog record


1. Realize the effect

insert image description here

2. The realization principle of folding cell

First of all, we need to know that ScrollView is the parent class of TableView. We can control the number of rows of cells we need to display through code , that is, the height of tableview.
we can passButton to realize the expansion and closing of tableview, and through - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath the method toRealize the switching of our cells

3. Realize the height change of the folded cell

Now that we know that the key to realizing the collapsed cell is to control the height of the tableview through the button, we now give the button click function

- (void)pressUp:(UIButton *)btn {
    
    
    if (btn.tag == 1002) {
    
    
        [btn setImage:[UIImage imageNamed:@"shou.png"] forState:UIControlStateNormal];
        _tableView.frame = CGRectMake(270, 200, 95, 20);
        btn.tag--;
    } else {
    
    
        [btn setImage:[UIImage imageNamed:@"fang.png"] forState:UIControlStateNormal];
        _tableView.frame = CGRectMake(270, 200, 95, 80);
        btn.tag++;
    }
}

In this way, when we click the button, the height of the tableview we display will change with the click of the button

Fourth, realize the cell selected and clicked

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    
    
    // 从_dataArray获取被选中的项目
    NSString *selectedItem = _dataArray[indexPath.section];
    
    // 从_dataArray中移除被选中的项目
    [_dataArray removeObjectAtIndex:indexPath.section];
    
    // 将被选中的项目插入到_dataArray的开头
    [_dataArray insertObject:selectedItem atIndex:0];

    // 重新加载整个UITableView的数据
    [_tableView reloadData];
    
    // 调用pressUp:方法,执行按钮状态的切换
    [self pressUp:_zhedie];
}

When a cell is selected (clicked), move the corresponding part of the data from _dataArray to the top of the array. This is done in the didSelectRowAtIndexPath method. Then reload the UITableView, and call the pressUp: method to ensure proper layout.

Summarize

In this way, we have simply implemented our folded cell.
The following is the complete implementation code of a simple folded cell.

- (void)viewDidLoad {
    
    
    [super viewDidLoad];
    //折叠cell=======
    _tableView = [[UITableView alloc] initWithFrame:CGRectMake(270, 200, 95, 80) style:UITableViewStylePlain];
    _tableView.delegate = self;
    _tableView.dataSource = self;
    
    _dataArray = [NSMutableArray arrayWithObjects:@"cell1", @"cell2", @"cell3", @"cell4", nil];
    [self.view addSubview:_tableView];
    
    _zhedie = [UIButton buttonWithType:UIButtonTypeSystem];
    _zhedie.frame = CGRectMake(270 + 95, 200, 20, 20);
    _zhedie.backgroundColor = [UIColor whiteColor];
    [_zhedie setImage:[UIImage imageNamed:@"shou.png"] forState:UIControlStateNormal];
    [_zhedie addTarget:self action:@selector(pressUp:)
      forControlEvents:UIControlEventTouchUpInside];
    _zhedie.tag = 1001;
    [self.view addSubview:_zhedie];
    
    if (_zhedie.tag == 1001) {
    
    
        _tableView.frame = CGRectMake(270, 200, 95, 20);
    }
    //=======折叠cell}
    
}

//====折叠cell
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    
    
    return 1;
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    
    
    return 4;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    
    
    return 20;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    
    
    NSString *selectedItem = _dataArray[indexPath.section];
    [_dataArray removeObjectAtIndex:indexPath.section];
    [_dataArray insertObject:selectedItem atIndex:0];
    
    [_tableView reloadData];
    [self pressUp:_zhedie];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    
    
    
    NSString *strID = @"ID";
    //尝试获取可以复用的单元格
    //如果得不到,返回为nil
    UITableViewCell *cell = [_tableView dequeueReusableCellWithIdentifier:strID];
    
    if (cell == nil) {
    
    
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:strID];
    }
    //单元格文字赋值
    cell.textLabel.text = [_dataArray objectAtIndex:indexPath.section];
    cell.textLabel.font = [UIFont systemFontOfSize:12.0];
    cell.textLabel.textAlignment = NSTextAlignmentLeft;

    return cell;
}

- (void)pressUp:(UIButton *)btn {
    
    
    if (btn.tag == 1002) {
    
    
        [btn setImage:[UIImage imageNamed:@"shou.png"] forState:UIControlStateNormal];
        _tableView.frame = CGRectMake(270, 200, 95, 20);
        btn.tag--;
    } else {
    
    
        [btn setImage:[UIImage imageNamed:@"fang.png"] forState:UIControlStateNormal];
        _tableView.frame = CGRectMake(270, 200, 95, 80);
        btn.tag++;
    }
}

Folding cells—demo

Guess you like

Origin blog.csdn.net/weixin_72437555/article/details/132567541