·您现在的位置: 云翼网络 >> 文章中心 >> 网站建设 >> app软件开发 >> IOS开发 >> [原]列表的二级展开功能。在原生UITableView上扩展实现。

[原]列表的二级展开功能。在原生UITableView上扩展实现。

作者:佚名      IOS开发编辑:admin      更新时间:2022-07-23

  还是直接贴代码了。

第一步:

@interface TodoViewController ()
{
    //声明一个数组 存放cell的信息
    NSMutableArray *grouparr;
}
@end

 

第二步:

//将cell的状态存入数组中
-(void)initDataSource
{
    NSMutableDictionary *nameAndStateDic1 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"TodoCell",@"cell",@"NO",@"state",nil];
    NSMutableDictionary *nameAndStateDic2 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"TodoCell",@"cell",@"NO",@"state",nil];
    NSMutableDictionary *nameAndStateDic3 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"TodoCell",@"cell",@"NO",@"state",nil];
    NSMutableDictionary *nameAndStateDic4 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"TodoCell",@"cell",@"NO",@"state",nil];
    grouparr = [[NSMutableArray alloc] initWithObjects:nameAndStateDic1,nameAndStateDic2,nameAndStateDic3, nameAndStateDic4,nil];
}

  

第三步:

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return grouparr.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

    if ([grouparr[indexPath.row][@"cell"] isEqualToString:@"TodoCell"]) {
        
        static NSString *cellID = @"cell";
        TodoCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID];
        if (!cell) {
            cell = [[TodoCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID];
            
        }
        NSData *data = dataArray[indexPath.row];
 
        [cell bindData:data];
        
        return cell;
    }
    else {
        
        static NSString *CellIdentifier = @"AttachedCell";
        
        AttachedCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        
        if (cell == nil) {
            cell = [[AttachedCell  alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
            
            cell.selectionStyle = UITableViewCellSelectionStyleNone;
        }
        return cell;
    }
    
    return nil;
    
}

  

第四步:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    //点击cell后 改变cell的颜色 渐变
    [_tableView deselectRowAtIndexPath:indexPath animated:YES];
    
    NSIndexPath *path = nil;
    if ([grouparr[indexPath.row][@"cell"] isEqualToString:@"MainCell"])
    {
        if ([grouparr[indexPath.row][@"cell"] isEqualToString:@"MainCell"]) {
            path = [NSIndexPath indexPathForItem:(indexPath.row+1) inSection:indexPath.section];
        }
        else if ([grouparr[indexPath.row][@"cell"] isEqualToString:@"AttachedCell"])
        {
            path = indexPath;
        }
    
        NSLog(@"现在是第%ld行",indexPath.row);
    
        if ([grouparr[indexPath.row][@"state"] boolValue] ) {
            // 关闭附加cell
            NSMutableDictionary *dd = grouparr[indexPath.row];
            NSString *name = dd[@"name"];
            NSMutableDictionary *nameAndStateDic = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"MainCell",@"cell",name,@"name",@"NO",@"state",nil];
            grouparr[(path.row-1)] = nameAndStateDic;
            [grouparr removeObjectAtIndex:path.row];
            NSLog(@"MainCell's grouparr:%@",grouparr);
            [_tableView beginUpdates];
            [_tableView deleteRowsAtIndexPaths:@[path]  withRowAnimation:UITableViewRowAnimationMiddle];
            [_tableView endUpdates];
        }
        else
        {
            // 打开附加cell
            NSMutableDictionary *dd = grouparr[indexPath.row];
            NSString *name = dd[@"name"];
        
            NSMutableDictionary *nameAndStateDic = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"MainCell",@"cell",name,@"name",@"YES",@"state",nil];

            grouparr[(path.row-1)] = nameAndStateDic;
        
            NSMutableDictionary *nameAndStateDic1 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"AttachedCell",@"cell",@"YES",@"state",nil];
        
            [grouparr insertObject:nameAndStateDic1 atIndex:path.row];
            NSLog(@"AttachedCell's grouparr:%@",grouparr);
            [_tableView beginUpdates];
            [_tableView insertRowsAtIndexPaths:@[path] withRowAnimation:UITableViewRowAnimationMiddle];
            [_tableView endUpdates];
        }
    }
}

  

搞定收工!