折叠cell

343 阅读2分钟
#import "ViewController.h"
#import "ExpandCell.h"

#define kCell_Height 44

@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; i < self.dataSource.count; i++) {
        //所有的分区都是闭合
        [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