UITableViewCell展开合并

感觉需要写点关于开发过程中的东西…但又不知道该写什么,从简单的写起吧。
没啥技术含量,纯当记录了。

前不久第一次遇到需要写cell的展开合并,按自己的思路写了一份,分享一下。
先看效果:

QQ20170809-140559-HD.gif

首先是在自定义的cell里面声明bool类型
@property (nonatomic, assign) BOOL isOpen;

接下来实现set方法:

- (void)setIsOpen:(BOOL)isOpen
{
    if(!isOpen) {
        // 这里可以把View移除
        return;
    }
    // 这里可以写展开合并部分的View的布局
}

我约束是用Masnory来写的,需要注意的是约束从上往下写,别用self.mas_centerY,因为cell高度会改变。

在ViewController中:
声明一个可变数组用来存放展开cell的indexPath.row

cell的高度需要改变:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *indexStr = [NSString stringWithFormat:@"%ld", (long)indexPath.row];
    if ([_indexArray containsObject:indexStr]) {
        return 展开后cell的高度;
    }
    return 合并后cell高度;
}

cell的didSelect方法中:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *indexStr = [NSString stringWithFormat:@"%ld", (long)indexPath.row];
    
    MyTableViewCell *cell = (MyTableViewCell *)[self.tableView cellForRowAtIndexPath:indexPath];
    
    if ([_indexArray containsObject:indexStr]) {

        [_indexArray removeObject:indexStr];
        cell.isOpen = NO;
    }  else {
        [_indexArray addObject:indexStr];
        cell.isOpen = YES;
    }
    [_tableView reloadData];
}

完成,需要注意cell别复用哦~

如果只是UILabel的行数展开合并的话,只需要改label.numberOfLines就可以了。

你可能感兴趣的:(UITableViewCell展开合并)