说明:写的东西是参照某位大神写的博客,但是我自己的数据他有些没有,然后我就根据大神的博客重新写了下,希望对大家有用
1.数据的形式,请求下来的数据将会是如下格式
@property (nonatomic, strong) NSString *itemParentId;//父节点的id
@property (nonatomic, strong) NSString *itemId;//本节点的id
@property (nonatomic, strong) NSString *itemName;//本节点的名称
@property (nonatomic, assign) BOOL expand;//该节点是否处于展开状态
这些数据中有父节点的ID和自身的ID,还有自身的名字,并且自己写一个属性expand,之后来判断该节点是否处于展开或者收起状态
2.那么根据这个节点我们创建一个Model,代码如下,代码中我写好了注释
创建一个Node类继承于NSObject
Node.h中的代码:
#import <Foundation/Foundation.h>
@interface Node : NSObject
//这里是数据
@property (nonatomic, strong) NSString *itemParentId;//父节点的id
@property (nonatomic, strong) NSString *itemId;//本节点的id
@property (nonatomic, strong) NSString *itemName;//本节点的名称
@property (nonatomic, strong) NSString *itemIndex;//本节点在该级菜单中的索引值(这个值可以不用关注,这是我自己用到的数据)
@property (nonatomic, assign) BOOL expand;//该节点是否处于展开状态
@property (nonatomic, strong) NSString *siteSSCID;//(这个值也不用关注,也是我自己的数据的东西)
/**
* 快速实例化该对象模型
*
* @param itemParentId 父节点的id
* @param itemId 本节点的id
* @param itemName 本节点的名称
* @param itemIndex 本节点在该级菜单中的索引值
* @param expand 该节点是否处于展开状态
*
* @return 一个node实例
*/
- (instancetype)initWithParentId:(NSString *)itemParentId nodeId:(NSString *)itemId name:(NSString *)itemName index:(NSString *)itemIndex siteSSCID:(NSString *)itemSiteSSCID expand:(BOOL)expand;
@end
#import "Node.h"
@implementation Node
- (instancetype)initWithParentId:(NSString *)itemParentId nodeId:(NSString *)itemId name:(NSString *)itemName index:(NSString *)itemIndex siteSSCID:(NSString *)itemSiteSSCID expand:(BOOL)expand{
self = [self init];
if (self) {
self.itemParentId = itemParentId;
self.itemId = itemId;
self.itemName = itemName;
self.itemIndex = itemIndex;
self.siteSSCID = itemSiteSSCID;
self.expand = expand;
}
return self;
}
@end
这样做完之后,我们就把数据的Model构建完成了,现在根据这个Model来创建树型菜单
3.创建一个TreeTableView类继承于UITableView,其中的注释在代码中,我就直接粘贴代码了
TreeTableView.h中的代码
#import <UIKit/UIKit.h>
@interface TreeTableView : UITableView
@property (nonatomic , strong) NSArray *dataS;//传递过来已经组织好的数据(全量数据)
@property (nonatomic , strong) NSMutableArray *tempData;//用于存储数据源(部分数据,这个数据是根据dataS来