感觉需要写点关于开发过程中的东西…但又不知道该写什么,从简单的写起吧。
没啥技术含量,纯当记录了。
前不久第一次遇到需要写cell的展开合并,按自己的思路写了一份,分享一下。
先看效果:
首先是在自定义的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就可以了。