#import <Foundation/Foundation.h> @interface MyData : NSObject { NSMutableArray *_array;// 每组的数据 BOOL _isShow;// 组的状态,yes显示组,no不显示组 NSString *_name;// 组名 } @property (nonatomic,retain) NSMutableArray *array; @property (nonatomic,copy) NSString * name; @property (nonatomic,assign) BOOL isShow; @end
- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. // 全局的数据源 dataArray = [[NSMutableArray alloc] init]; // 添加数据 for (int i='A'; i<='Z'; i++) { MyData *myData = [[MyData alloc] init]; myData.name = [NSString stringWithFormat:@"%c",i]; for (int j=0; j<10; j++) { [myData.array addObject:[NSString stringWithFormat:@"%c-%d",i,j]]; } [dataArray addObject:myData]; } myTableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 460-44) style:UITableViewStylePlain]; myTableView.dataSource = self; myTableView.delegate = self; myTableView.rowHeight = 30; [self.view addSubview:myTableView]; }
// 组数 - (NSInteger) numberOfSectionsInTableView:(UITableView *)tableView { return [dataArray count]; } // 根据状态来判断是否显示该组,隐藏组把组的行数设置为0即可 - (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { MyData *data = [dataArray objectAtIndex:section]; if ([data isShow]) { return [[data array] count]; }else{ return 0; } } // 添加每行显示的内容 - (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *cellName = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellName ]; if (!cell) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellName] autorelease]; } MyData *data = [dataArray objectAtIndex:indexPath.section]; NSString *str = [[data array] objectAtIndex:indexPath.row]; cell.textLabel.text = str; return cell; }
// 定义头标题的视图,添加点击事件 - (UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { MyData *data = [dataArray objectAtIndex:section]; UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; btn.frame = CGRectMake(0, 0, 320, 30); [btn setTitle:data.name forState:UIControlStateNormal]; btn.tag = section; [btn addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside]; if (section%2) { btn.backgroundColor = [UIColor darkGrayColor]; }else{ btn.backgroundColor = [UIColor lightGrayColor]; } return btn; } - (void) btnClick:(UIButton *)btn { MyData *data = [dataArray objectAtIndex:btn.tag]; // 改变组的显示状态 if ([data isShow]) { [data setIsShow:NO]; }else{ [data setIsShow:YES]; } // 刷新点击的组标题,动画使用卡片 [myTableView reloadSections:[NSIndexSet indexSetWithIndex:btn.tag] withRowAnimation:UITableViewRowAnimationFade]; }