用法(类似UITableView)
初始化XDMultTableView
#import "XDMultTableView.h"...@property(nonatomic, readwrite, strong)XDMultTableView *tableView; _tableView = [[XDMultTableView alloc] initWithFrame:CGRectMake(0, 64, self.view.frame.size.width, self.view.frame.size.height-64)]; _tableView.openSectionArray = [NSArray arrayWithObjects:@1,@2, nil]; _tableView.delegate = self; _tableView.datasource = self; _tableView.backgroundColor = [UIColor whiteColor]; [self.view addSubview:_tableView];实现数据源
- (NSInteger)mTableView:(XDMultTableView *)mTableView numberOfRowsInSection:(NSInteger)section{ return 5;}- (XDMultTableViewCell *)mTableView:(XDMultTableView *)mTableViewcellForRowAtIndexPath:(NSIndexPath *)indexPath{ static NSString *cellIdentifier = @"cell"; UITableViewCell *cell = [mTableView dequeueReusableCellWithIdentifier:cellIdentifier]; if (cell == nil) {cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; } UIView *view = [[UIView alloc] initWithFrame:cell.bounds] ; view.layer.backgroundColor = [UIColor whiteColor].CGColor; view.layer.masksToBounds = YES; view.layer.borderWidth= 0.3; view.layer.borderColor= [UIColor lightGrayColor].CGColor; cell.backgroundView = view; cell.selectionStyle = UITableViewCellSelectionStyleNone; return cell;}- (NSInteger)numberOfSectionsInTableView:(XDMultTableView *)mTableView{ return 6;}-(NSString *)mTableView:(XDMultTableView *)mTableView titleForHeaderInSection:(NSInteger)section{ return @"我是头部";}实现代理
- (CGFloat)mTableView:(XDMultTableView *)mTableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ return 50;}- (CGFloat)mTableView:(XDMultTableView *)mTableView heightForHeaderInSection:(NSInteger)section{ return 40;}- (void)mTableView:(XDMultTableView *)mTableView willOpenHeaderAtSection:(NSInteger)section{ NSLog(@"即将展开");}- (void)mTableView:(XDMultTableView *)mTableView willCloseHeaderAtSection:(NSInteger)section{ NSLog(@"即将关闭");}- (void)mTableView:(XDMultTableView *)mTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ NSLog(@"点击cell");}列表展开关闭的实现原理
//section header view 设置tag值为sectionview.tag = section;UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapHeader:)]; [view addGestureRecognizer:tap];手势的响应事件
- (void)tapHeader:(UITapGestureRecognizer *) tap { NSInteger section = tap.view.tag; NSNumber *sectionObj = [NSNumber numberWithInteger:section]; UIImageView *imageView = (UIImageView *)[tap.view viewWithTag:100]; //_multopenSectionArray 用于记录每个 section的展开和关闭状态 if ([_multopenSectionArray containsObject:sectionObj]) {NSArray *deleteArray = [self buildDeleteRowWithSection:section];[_multopenSectionArray removeObject:sectionObj];//想关闭的section的所有indexPath[_tableView deleteRowsAtIndexPaths:deleteArray withRowAnimation:UITableViewRowAnimationFade];[UIView animateWithDuration:0.3 animations:^{ imageView.transform = CGAffineTransformMakeRotation(-M_PI/2);}]; }else{[_multopenSectionArray addObject:sectionObj];//想展开的section的所有indexPathNSArray *insertArray = [self buildInsertRowWithSection:section];[_tableView insertRowsAtIndexPaths:insertArray withRowAnimation:UITableViewRowAnimationFade];[UIView animateWithDuration:0.3 animations:^{ imageView.transform = CGAffineTransformMakeRotation(0);}]; }}总结