IOS开发入门之iOS 树形结构菜单
白羽 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
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved