微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Objective-c中创建一个多级UITableView高达n级

如何解决如何在Objective-c中创建一个多级UITableView高达n级

我想创建一个通用的 UITableView 展开和折叠,以便它可以与数组/字典数组绑定到多级。

级别数将在运行时定义。请帮忙,我正在使用 Objective-C。

解决方法

试试这个代码。按照我的要求为我工作。

------ 展开行------

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
    
    NSDictionary * d = [self.arForTable objectAtIndex:indexPath.row];
    if([d valueForKey:@"Objects"]) {
        NSArray * ar = [d valueForKey:@"Objects"];
        BOOL isAlreadyInserted = NO;
        
        for(NSDictionary * dInner in ar){
            NSInteger index = [self.arForTable indexOfObjectIdenticalTo:dInner];
            isAlreadyInserted = (index > 0 && index != NSIntegerMax);
            if(isAlreadyInserted) break;
        }
        
        if(isAlreadyInserted) {
            [self miniMizeThisRows:ar];
        }
        else {
            NSUInteger count = indexPath.row+1;
            NSMutableArray * arCells = [NSMutableArray array];
            for(NSDictionary * dInner in ar) {
                [arCells addObject:[NSIndexPath indexPathForRow:count inSection:0]];
                [self.arForTable insertObject:dInner atIndex:count++];
            }
            
            [tableView insertRowsAtIndexPaths:arCells withRowAnimation:UITableViewRowAnimationFade];
            
            [tableView beginUpdates];
            [tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
            [tableView endUpdates];
        }
    }
}

------ 最小化行------

-(void)miniMizeThisRows:(NSArray *)ar{
    for(NSDictionary * dInner in ar ) {
        NSUInteger indexToRemove = [self.arForTable indexOfObjectIdenticalTo:dInner];
        
        NSArray * arInner = [dInner valueForKey:@"Objects"];
        if(arInner && [arInner count] > 0){
            [self miniMizeThisRows:arInner];
        }
        
        if([self.arForTable indexOfObjectIdenticalTo:dInner] != NSNotFound) {
            [self.arForTable removeObjectIdenticalTo:dInner];
            [self.mainTableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:indexToRemove inSection:0]] withRowAnimation:UITableViewRowAnimationFade];
            
            [self.mainTableView beginUpdates];
            [self.mainTableView reloadRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:indexToRemove-1 inSection:0]] withRowAnimation:UITableViewRowAnimationFade];
            [self.mainTableView endUpdates];
        }
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。