iOS-RATreeView在线获取数据并展示

最近项目相关,想用tableview展示出一个数据层次
这里用到了第三方框架RATreeView

其实网上有很多demo都详细介绍了用法,但是使用的都是静态数据,这里演示一下如何使用动态数据自动分层。

请按照需求自行变更数据格式,这里只是最简单的示例。
title即每一行cell的标题,list是子层级内容。可以随意增加删减测试

NameCardsTest.png

使用RATreeView的代码这里就不提了,具体可以看demo。
这里放出最重要的递归代码,循环遍历从后台获取到的数据,并封层显示。


//加载数据
- (void)setData {
    
    NSString *plistPath = [[NSBundle mainBundle]pathForResource:@"NameCardsTest" ofType:@"plist"];
    NSMutableArray *dataArr = [[NSMutableArray alloc]initWithContentsOfFile:plistPath];
    NSLog(@"%@",dataArr);//直接打印数据
    
    [dataArr enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        
        NSDictionary *dicLevel1 = (NSDictionary *)obj;
        
        NSArray *arrList = (NSArray *) dicLevel1[@"list"];
        
        if (arrList.count > 0) {
            
            NameCardModel *nameCard = [NameCardModel objectWithNoChildren:dicLevel1[@"title"]];
            
            [self recursiveAllChildrens:arrList withFather:nameCard];
            [self.nameCardsArray addObject:nameCard];
            
        }else {
            
            NameCardModel *nameCard = [NameCardModel objectWithNoChildren:dicLevel1[@"title"]];
            [self.nameCardsArray addObject:nameCard];
        }
        
    }];
    
}

//循环遍历
-(void)recursiveAllChildrens:(NSArray *)array withFather:(NameCardModel *)father {
    
    
    [array enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        
        NSDictionary *dic = (NSDictionary *)obj;
        
        NSArray *arrList = (NSArray *) dic[@"list"];
        
        if (arrList.count > 0) {
            
            NameCardModel *nameCard = [NameCardModel objectWithNoChildren:dic[@"title"]];
            
            [father addChild:nameCard];
            [self recursiveAllChildrens:arrList withFather:nameCard];
            
        }else {
            
            NameCardModel *nameCard = [NameCardModel objectWithNoChildren:dic[@"title"]];
            [father addChild:nameCard];
            
        }
        
    }];
    
}

最终效果

分级效果图.png

这里我使用了两种cell,一种代表节点的部门,另一种代表部门下的职员。
有时在同一层级下,同时拥有部门和职员两种cell。
可以根据自己需求自行替换删减。

最后附上demo链接 demo

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,811评论 1 32
  • 周检视2018第25周(2018年06月24日~06月30日) 没有记录就没有发生—— 健康: 1)徒步4200...
    圆圆jXY阅读 229评论 0 0
  • 熟悉我的朋友都知道,三年前因为某一些事情让我变得一无所有。只要初心不死, 继续死磕互联网3年,净收益1700万,让...
    梦儿_9142阅读 416评论 0 0
  • 第n次说了要早些休息,然而第n+1次的在这个点犹豫踌躇…看着群里的18,19的学弟妹,我如同看到了曾经的自己。曾一...
    Dylan育辉阅读 355评论 1 0
  • 线程池 代码实现
    山间清泉1111阅读 199评论 0 0

友情链接更多精彩内容