美文网首页iOS开发
iOS-RATreeView在线获取数据并展示

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

作者: 拎着猫走的鱼 | 来源:发表于2019-08-27 17:31 被阅读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

    相关文章

      网友评论

        本文标题:iOS-RATreeView在线获取数据并展示

        本文链接:https://www.haomeiwen.com/subject/rftyectx.html