效果:(界面有点丑,请别介意)
方式1:字典存状态,通用所有
#import "XHGPSDemoViewController.h"@interface XHGPSDemoViewController ()/** tableView*/
@property (nonatomic, strong) UITableView * tableView;
/** 数据数组*/
@property (nonatomic, strong) NSMutableArray * dataArray;
/** 记录组的开关*/
@property (nonatomic, strong) NSMutableDictionary * sectionStateDic;
@end
@implementation XHGPSDemoViewController
#pragma mark - LazyLoad 懒加载
- (UITableView *)tableView {
if (_tableView == nil) {
_tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain];
_tableView.delegate = self;
_tableView.dataSource = self;
_tableView.tableFooterView = [UIView new];
[self.view addSubview:_tableView];
}
return _tableView;
}
- (NSMutableArray *)dataArray {
if (_dataArray == nil) {
_dataArray = [NSMutableArray new];
}
return _dataArray;
}
- (NSMutableDictionary *)sectionStateDic {
if (_sectionStateDic == nil) {
_sectionStateDic = [NSMutableDictionary new];
}
return _sectionStateDic;
}
#pragma mark - System Method 系统方法
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
[self configSubViews];
[self transData];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
#pragma mark - Custom Method 自定义方法
/** 配置子视图、子控件 */
- (void)configSubViews {
UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 200)];
self.tableView.tableHeaderView = headerView;
}
#pragma mark - TableView DataSource 数据源方法(TableVieW)
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
NSArray *listArray = self.dataArray[section];
BOOL isHiden = [[self.sectionStateDic objectForKey:@(section)] boolValue];
if (isHiden) {
return 0;
}
return listArray.count;
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return self.dataArray.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *cellId = @"CellId";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId];
}
NSArray *listArray = self.dataArray[indexPath.section];
cell.textLabel.text = listArray[indexPath.row];
return cell;
}
#pragma mark - TableView Delegate 代理(TableVieW)
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
return 50;
}
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
UIButton *sectionBtn = [UIButton buttonWithType:UIButtonTypeCustom];
[sectionBtn setTitle:@"点下就关了" forState:UIControlStateNormal];
[sectionBtn setTitle:@"点下就开了" forState:UIControlStateSelected];
[sectionBtn setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
[sectionBtn setTitleColor:[UIColor blackColor] forState:UIControlStateSelected];
sectionBtn.backgroundColor = [UIColor cyanColor];
[sectionBtn addTarget:self action:@selector(sectionBtnAction:) forControlEvents:UIControlEventTouchUpInside];
/** 设置状态*/
sectionBtn.tag = section + 1000;
sectionBtn.selected = [[self.sectionStateDic objectForKey:@(section)] boolValue];
return sectionBtn;
}
#pragma mark - NetWork 网络请求
/** 请求数据 */
- (void)transData {
/** 数据数组*/
NSArray *firstSectionArray = @[@"00",@"01",@"02",@"03",@"04",@"05",@"06"];
NSArray *secSectionArray = @[@"10",@"11",@"12",@"13",@"14"];
NSArray *thirdSectionArray = @[@"20",@"21",@"22",@"23",@"24",@"25"];
/** 添加数据*/
[self.dataArray addObject:firstSectionArray];
[self.dataArray addObject:secSectionArray];
[self.dataArray addObject:thirdSectionArray];
/** 状态*/
for (int i = 0; i < 3; i ++) {
[self.sectionStateDic setObject:@(YES) forKey:@(i)];
}
[self.tableView reloadData];
}
#pragma mark - Action 响应事件
- (void)sectionBtnAction:(UIButton *)btn {
btn.selected = !btn.selected;
NSInteger section = btn.tag - 1000;
[self.sectionStateDic setObject:@(btn.selected) forKey:@(section)];
[self.tableView reloadData];
}
@end
方式2:模型存状态,通用模型
#import@class List;@interface XHGPSDemoModel : NSObject/** 类型*/@property (nonatomic, copy) NSString * type;/** 分类名字*/@property (nonatomic, copy) NSString * classifyName;/** 模型数组*/@property (nonatomic, copy) NSArray *list;
/** 是否关*/
@property (nonatomic, assign) BOOL isClose;
@end
@interface List : NSObject
/** 名字*/
@property (nonatomic, copy) NSString * name;
/** 图片地址*/
@property (nonatomic, copy) NSString * imgUrl;
@end
#import "XHGPSDemoViewController.h"#import "XHGPSDemoModel.h"@interface XHGPSDemoViewController ()/** tableView*/
@property (nonatomic, strong) UITableView * tableView;
/** 数据数组*/
@property (nonatomic, strong) NSMutableArray * dataArray;
@end
@implementation XHGPSDemoViewController
#pragma mark - LazyLoad 懒加载
- (UITableView *)tableView {
if (_tableView == nil) {
_tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain];
_tableView.delegate = self;
_tableView.dataSource = self;
_tableView.tableFooterView = [UIView new];
[self.view addSubview:_tableView];
}
return _tableView;
}
- (NSMutableArray *)dataArray {
if (_dataArray == nil) {
_dataArray = [NSMutableArray new];
}
return _dataArray;
}
#pragma mark - System Method 系统方法
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
[self configSubViews];
[self transData];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
#pragma mark - Custom Method 自定义方法
/** 配置子视图、子控件 */
- (void)configSubViews {
UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 200)];
self.tableView.tableHeaderView = headerView;
}
#pragma mark - TableView DataSource 数据源方法(TableVieW)
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
XHGPSDemoModel *model = self.dataArray[section];
BOOL isHiden = model.isClose;
if (isHiden) {
return 0;
}
return model.list.count;
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return self.dataArray.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *cellId = @"CellId";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId];
}
XHGPSDemoModel *model = self.dataArray[indexPath.section];
List *listModel = model.list[indexPath.row];
cell.textLabel.text = listModel.name;
return cell;
}
#pragma mark - TableView Delegate 代理(TableVieW)
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
return 50;
}
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
UIButton *sectionBtn = [UIButton buttonWithType:UIButtonTypeCustom];
[sectionBtn setTitle:@"点下就关了" forState:UIControlStateNormal];
[sectionBtn setTitle:@"点下就开了" forState:UIControlStateSelected];
[sectionBtn setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
[sectionBtn setTitleColor:[UIColor blackColor] forState:UIControlStateSelected];
sectionBtn.backgroundColor = [UIColor cyanColor];
[sectionBtn addTarget:self action:@selector(sectionBtnAction:) forControlEvents:UIControlEventTouchUpInside];
/** 设置状态*/
sectionBtn.tag = section + 1000;
XHGPSDemoModel *model = self.dataArray[section];
sectionBtn.selected = model.isClose;
return sectionBtn;
}
#pragma mark - NetWork 网络请求
/** 请求数据 */
- (void)transData {
/** 状态 & 数据*/
for (int i = 0; i < 3; i ++) {
XHGPSDemoModel *model = [[XHGPSDemoModel alloc] init];
NSMutableArray *listArray = [NSMutableArray new];
for (int j = 0; j < 5; j ++) {
List *listModel = [[List alloc] init];
listModel.name = [NSString stringWithFormat:@"第%ld组 ,第%ld个",i,j];
[listArray addObject:listModel];
}
/** 默认关*/
model.isClose = YES;
model.list = listArray;
[self.dataArray addObject:model];
}
[self.tableView reloadData];
}
#pragma mark - Action 响应事件
- (void)sectionBtnAction:(UIButton *)btn {
btn.selected = !btn.selected;
NSInteger section = btn.tag - 1000;
XHGPSDemoModel *model = self.dataArray[section];
model.isClose = btn.selected;
[self.tableView reloadData];
}
@end