关键词:递归 多级菜单 复选
目标:
1.显示多级菜单,默认显示一级.
2.可以通过点击有子级的行展开菜单
3.通过复选框,改变选中状态。状态有全选、半选、未选中
4.可以扩展获取当前所选的条目集合
menu.gif
实现过程:
数据处理
1.首先根Datasource进行数据处理
2.生成一个handler:MultilevelDataHandler 将数据处理逻辑在handle处理,将数据处理隔离
MultilevelDataHandler *dataHandler = [MultilevelDataHandler sharedHandler];
[dataHandler setLevelKeys:@[@"second_category", @"knowledge"]]; //由于源数据中每层数据可能采用不同的key,所有我把每层的key依次添加到数组里面,以便数据转化
[dataHandler setReDataSource:dataSource]; // 将源数据交给handle处理
3.建立一个数据模型,需要用一些属性记录层级关系。最后我用了一个字典来记录原始的数据信息。
//
// MultilevelMenuModel.h
// MultilevelMenuWithCheckbox
Created by hyt on 2017/10/31.
// Copyright © 2017年 hyt. All rights reserved.
//#importtypedef NS_ENUM (NSInteger, MMSelectState){
selectNone,
selectHalf,
selectAll
};
@interface MultilevelMenuModel : NSObject
@property (nonatomic, assign) NSInteger MMLevel;
@property (nonatomic, assign) NSInteger MMIndex;
//@property (nonatomic, assign) NSInteger MMSuperIndex;
@property (nonatomic, strong) NSMutableArray *locationArray;
@property (nonatomic, strong) NSArray *MMSubArray;
@property (nonatomic, assign) MMSelectState MMSelectState;
@property (nonatomic, assign) BOOL MMIsOpen;
@property (nonatomic, strong) NSDictionary *dataDict; // original data
@end
这里是Demo的数据Json
json数据:
[{
"id":