// cell自带缩进的方法
cell.indentationLevel = node.depth;// 缩进级别
cell.indentationWidth =30.f; // 每个缩进级别的距离
- (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;
}