白羽
2018-11-23
来源 :网络
阅读 1853
评论 0
摘要:本文将带你了解IOS开发入门iOS 树形结构菜单,希望本文对大家学IOS有所帮助。
本文将带你了解IOS开发入门iOS 树形结构菜单,希望本文对大家学IOS有所帮助。
说明:写的东西是参照某位大神写的博客,但是我自己的数据他有些没有,然后我就根据大神的博客重新写了下,希望对大家有用
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
</foundation>
Node.m中的代码
#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来最初显示在界面上的菜单的名字)
@property (nonatomic , strong) void (^selectBlock)(NSString *);//这个block是我用来传当点击到最后子节点的时候,具体的传值我还没写</uikit>
-(NSMutableArray *)createTempData : (NSArray *)data;//初始化表格数据(这个方法是根据总数据先初始化最开显示的最上层的菜单,然后得到tempData)
@end
TreeTableView.m中的代码
#import "TreeTableView.h"
#import "Node.h"
@interface TreeTableView ()<uitableviewdatasource,uitableviewdelegate>
{
NSMutableDictionary *_dic;//处理重复数据用
NSInteger _depth;//深度,就是是第几级菜单
}
@end
@implementation TreeTableView
-(instancetype)initWithFrame:(CGRect)frame{
self = [super initWithFrame:frame style:UITableViewStyleGrouped];
if (self) {
_dic = [@{} mutableCopy];
self.dataSource = self;
self.delegate = self;
}
return self;
}
/**
* 初始化数据源
*/
-(NSMutableArray *)createTempData : (NSArray *)data{
NSMutableArray *tempArray = [@[] mutableCopy];
NSMutableArray *keys = [@[] mutableCopy];
for (int i=0; i<data.count; _dic="" _nonnull="" bool="" id="" if="" keys="" mark="" node="[self.dataS" node.expand="YES;" node.itemparentid="" node1="=nil" node1.itemname="" node2="_dic[obj];" nsuinteger="" pragma="" pre="" return="" setobject:node="" tableview="" temparray="" uitableview="" uitableviewdatasource="" uitableviewdelegate=""><pre class="brush:java;">//首先展示的数据是tempData的数据</pre>
<pre class="brush:java;"> return self.tempData.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *NODE_CELL_ID = @"node_cell_id";
//定义cell
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:NODE_CELL_ID];
if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:NODE_CELL_ID];
}</pre>
<pre <code class
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之IOS频道!
喜欢 | 0
不喜欢 | 0
您输入的评论内容中包含违禁敏感词
我知道了

请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号