@interface ViewController ()<UITableViewDataSource,UITableViewDelegate>
@property (nonatomic,strong) UITableView *tableView
@property (nonatomic,strong) NSMutableArray *dataSource
@property (nonatomic,strong) NSMutableArray *sectionArray
@property (nonatomic,strong) NSMutableArray *stateArray
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad]
self.title = @"折叠的tableView"
self.view.backgroundColor = [UIColor whiteColor]
[self initDataSource]
[self.view addSubview:self.tableView]
}
- (void)initDataSource {
self.sectionArray = [NSMutableArray arrayWithObjects:@"关于直销银行",
@"关于理财产品",
@"关于我的投资",
@"安全中心",nil]
NSArray *one = @[@"关于直销银行1",@"关于直销银行2",@"关于直销银行3"]
NSArray *two = @[@"如何购买?",@"如何赎回?",@"业务办理时间?"]
NSArray *three = @[@"关于我的投资1",@"关于我的投资2",@"关于我的投资3"]
NSArray *four = @[@"安全中心1",@"安全中心2",@"安全中心3",@"安全中心4"]
self.dataSource = [NSMutableArray arrayWithObjects:one,two,three,four, nil]
self.stateArray = [NSMutableArray array]
for (NSInteger i = 0
//所有的分区都是闭合
[self.stateArray addObject:@"0"]
}
}
- (UITableView *)tableView {
if (!_tableView) {
_tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain]
_tableView.delegate = self
_tableView.dataSource = self
_tableView.estimatedRowHeight = 0
_tableView.sectionHeaderHeight = 0.0
_tableView.sectionFooterHeight = 0.0
_tableView.estimatedSectionHeaderHeight = 0.0
_tableView.estimatedSectionFooterHeight = 0.0
[_tableView registerClass:[ExpandCell class] forCellReuseIdentifier:NSStringFromClass([ExpandCell class])]
}
return _tableView
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return self.dataSource.count
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
if ([self.stateArray[section] isEqualToString:@"1"]){
//如果是展开状态
NSArray *array = [self.dataSource objectAtIndex:section]
return array.count
} else {
//如果是闭合,返回0
return 0
}
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
ExpandCell *cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([ExpandCell class])]
cell.titleLabel.textAlignment = NSTextAlignmentLeft
cell.titleLabel.text = self.dataSource[indexPath.section][indexPath.row]
cell.backgroundColor = [UIColor whiteColor]
cell.selectionStyle = UITableViewCellSelectionStyleDefault
cell.contentView.backgroundColor = [UIColor whiteColor]
return cell
}
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
return self.sectionArray[section]
}
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]
[button setFrame:CGRectMake(0, 0, self.view.frame.size.width, kCell_Height)]
[button setTag:section+1000]
button.backgroundColor = [[UIColor redColor] colorWithAlphaComponent:0.1]
[button setTitleColor:[UIColor grayColor] forState:UIControlStateNormal]
[button setTitleEdgeInsets:UIEdgeInsetsMake(0, 0, 0, 0)]
[button addTarget:self action:@selector(buttonPress:) forControlEvents:UIControlEventTouchUpInside]
UIView *lineView = [[UIView alloc] initWithFrame:CGRectMake(0, button.frame.size.height-1, button.frame.size.width, 1)]
lineView.backgroundColor = [[UIColor grayColor] colorWithAlphaComponent:0.2]
[button addSubview:lineView]
UIView *dotView = [[UIImageView alloc]initWithFrame:CGRectMake(10, (kCell_Height-22)/2, 22, 22)]
dotView.backgroundColor = [[UIColor cyanColor] colorWithAlphaComponent:0.2]
dotView.layer.cornerRadius = 11
dotView.layer.masksToBounds = YES
[button addSubview:dotView]
UIImageView *directionImageView = [[UIImageView alloc]initWithFrame:CGRectMake(self.view.frame.size.width-30, (kCell_Height-6)/2, 10, 6)]
if ([self.stateArray[section] isEqualToString:@"0"]) {
directionImageView.image = [UIImage imageNamed:@"ico_listdown"]
} else if ([self.stateArray[section] isEqualToString:@"1"]) {
directionImageView.image = [UIImage imageNamed:@"ico_listup"]
}
[button addSubview:directionImageView]
UILabel *desLabel = [[UILabel alloc]initWithFrame:CGRectMake(45, (kCell_Height-20)/2, 200, 20)]
[desLabel setBackgroundColor:[UIColor clearColor]]
[desLabel setFont:[UIFont systemFontOfSize:14]]
[desLabel setText:self.sectionArray[section]]
[button addSubview:desLabel]
return button
}
- (void)buttonPress:(UIButton *)sender {
//判断状态值
if ([self.stateArray[sender.tag - 1000] isEqualToString:@"1"]){
//修改
[self.stateArray replaceObjectAtIndex:sender.tag - 1000 withObject:@"0"]
} else {
[self.stateArray replaceObjectAtIndex:sender.tag - 1000 withObject:@"1"]
}
[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:sender.tag-1000] withRowAnimation:UITableViewRowAnimationAutomatic]
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return kCell_Height
}
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
return 0.00001
}
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
return kCell_Height
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSLog(@"区头 == %@ , 行 == %@",self.sectionArray[indexPath.section],(self.dataSource[indexPath.section])[indexPath.row])
}
@end
