iOS开发---做tableview分级展示

// cell自带缩进的方法

cell.indentationLevel = node.depth;// 缩进级别

cell.indentationWidth =30.f; // 每个缩进级别的距离


// 主要是在tableview的didselect方法中

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{

    RMLog(@"%ld----%ld",(long)indexPath.section,(long)indexPath.row);

    //先修改数据源

    OrganizationModel *parentNode = [_tempData objectAtIndex:indexPath.row];

    parentNode.expand = !parentNode.expand;

    [_tempData replaceObjectAtIndex:indexPath.row withObject:parentNode];


    NSUInteger startPosition = indexPath.row+1;

    NSUInteger endPosition = startPosition;

    BOOL expand = NO;

    for (int i=0; i<_data.count; i++) {

        OrganizationModel *node = [_data objectAtIndex:i];

        if (node.parentId == parentNode.nodeId) {

            if (parentNode.expand) {

                [_tempData insertObject:node atIndex:endPosition];

                expand = YES;

                endPosition++;

            }else{

                expand = NO;

                endPosition = [self removeAllNodesAtParentNode:parentNode];

                break;

            }

        }

    }

    

    //获得需要修正的indexPath

    NSMutableArray *indexPathArray = [NSMutableArray array];

    for (NSUInteger i=startPosition; i<endPosition; i++) {

        NSIndexPath *tempIndexPath = [NSIndexPath indexPathForRow:i inSection:0];

        [indexPathArray addObject:tempIndexPath];

    }

    

    //插入或者删除相关节点

    if (expand) {

        [self insertRowsAtIndexPaths:indexPathArray withRowAnimation:UITableViewRowAnimationTop];

    }else{

        [self deleteRowsAtIndexPaths:indexPathArray withRowAnimation:UITableViewRowAnimationTop];

    }


    if (![parentNode.uid length]) {

         RMLog(@"%@",expand?@"YES":@"NO");

        TreeTableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

        if (expand) {

            cell.arrowImageView.image = [UIImage imageNamed:@"below"];

        }

        else{

            cell.arrowImageView.image = [UIImage imageNamed:@"right"];

        }

        

    }

}

/**

 *  删除该父节点下的所有子节点(包括孙子节点)

 *

 *  @param parentNode 父节点

 *

 *  @return 该父节点下一个相邻的统一级别的节点的位置

 */

-(NSUInteger)removeAllNodesAtParentNode : (OrganizationModel *)parentNode{

    NSUInteger startPosition = [_tempData indexOfObject:parentNode];

    NSUInteger endPosition = startPosition;

    for (NSUInteger i=startPosition+1; i<_tempData.count; i++) {

        OrganizationModel *node = [_tempData objectAtIndex:i];

        endPosition++;

        if (node.depth <= parentNode.depth) {

            break;

        }

        if(endPosition == _tempData.count-1){

            endPosition++;

            node.expand = NO;

            break;

        }

        node.expand = NO;

    }

    if (endPosition>startPosition) {

        [_tempData removeObjectsInRange:NSMakeRange(startPosition+1, endPosition-startPosition-1)];

    }

    return endPosition;

}



详细内容转自
https://github.com/yixiangboy/TreeTableView

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值