在项目里我们经常会用到cell的展开和收起,就像下面这样,今天记录一下
实现代码
#import "MineViewController.h"
@interface MineViewController ()<UITableViewDelegate,UITableViewDataSource>
{
BOOL _flagArr[5];
NSArray *_titleArr;
NSArray *_contentArr;
}
@property(nonatomic,strong)UITableView *tableView;
@end
@implementation MineViewController
- (void)viewDidLoad {
[super viewDidLoad];
//
_tableView = [[UITableView alloc]initWithFrame:self.view.bounds style:UITableViewStylePlain];
_tableView.delegate = self;
_tableView.dataSource = self;
[self.view addSubview:_tableView];
_titleArr = @[@"111",@"222",@"333",@"444",@"555"];
_contentArr = @[@"第一项内容111111",@"第二项内容222222",@"第三项内容333333",@"第四项内容444444",@"第五项内容555555"];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
if (_flagArr[section] == YES){
return 1;
}else {
return 0;
}
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
return _contentArr.count;
}
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
return 40;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
CGFloat rowHeight = [_contentArr[indexPath.row] boundingRectWithSize:CGSizeMake(SCREENWIDTH, 1000) options:NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:16]} context:nil].size.height;
return rowHeight + 40;
}
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
UIView * view = [[UIView alloc]initWithFrame:self.view.frame];
view.backgroundColor = [UIColor whiteColor];
//创建一个透明的按钮将试图覆盖
UIButton * questionBtn = [[UIButton alloc]initWithFrame:view.frame];
questionBtn.tag= section;
[questionBtn addTarget:self action:@selector(clickToOpen:) forControlEvents:UIControlEventTouchUpInside];
[view addSubview:questionBtn];
//添加一条下划线
UIImageView * lineImg = [[UIImageView alloc]initWithFrame:CGRectMake(0, 39.5, SCREENWIDTH, 0.5)];
lineImg.backgroundColor = [UIColor grayColor];
[questionBtn addSubview:lineImg];
//添加箭头
UIImageView * redSanjiaoImg = [[UIImageView alloc]initWithFrame:CGRectMake(SCREENWIDTH - 30, 15, 10, 10)];
redSanjiaoImg.image = [UIImage imageNamed:@"btn_forward_nightmode_8x12_"];
[questionBtn addSubview:redSanjiaoImg];
//标题
UILabel * labView = [[UILabel alloc]initWithFrame:CGRectMake(40, 10, SCREENWIDTH - 60, 20)];
labView.text = [_titleArr objectAtIndex:section];
[questionBtn addSubview:labView];
if (_flagArr[section] == YES){
//旋转90度
redSanjiaoImg.transform = CGAffineTransformMakeRotation(M_PI_2);
}else{
//恢复成原来的状态
redSanjiaoImg.transform = CGAffineTransformIdentity;
}
return view;
}
- (void)clickToOpen:(UIButton *)btn{
_flagArr[btn.tag] = !_flagArr[btn.tag];
//通过按钮的tag进行刷新
[_tableView reloadSections:[NSIndexSet indexSetWithIndex:btn.tag] withRowAnimation:UITableViewRowAnimationFade];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
if (cell == nil) {
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
}
cell.selectionStyle = UITableViewCellSelectionStyleNone;
cell.textLabel.text = [_contentArr objectAtIndex:indexPath.section];
cell.clipsToBounds = YES;
cell.layer.borderWidth = 0.5;
cell.layer.borderColor = [UIColor lightGrayColor].CGColor;
cell.textLabel.numberOfLines = 0;
return cell;
}
@end