iOS开发

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

2019-08-27  本文已影响0人  拎着猫走的鱼

最近项目相关,想用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

上一篇下一篇

猜你喜欢

热点阅读