zoukankan      html  css  js  c++  java
  • [原]列表的二级展开功能。在原生UITableView上扩展实现。

      还是直接贴代码了。

    第一步:

    @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];
            }
        }
    }
    

      

    搞定收工!

  • 相关阅读:
    [HDOJ4417]Super Mario(归并树)
    [POJ2104] K-th Number(归并树,二分)
    2017北理校赛G题 人民的名义(FFT)
    [CF762C] Two Strings(预处理,二分答案)
    [CF798D] Mike and distribution(贪心,鸽笼原理,随机)
    [CF798C] Mike and gcd problem(规律,gcd)
    2017北理校赛H题 青蛙过河(线段树, dp, 离散化)
    [CF798B] Mike and strings(暴力)
    [CF798A] Mike and palindrome(水题,trick)
    [CCPC2017]湘潭邀请赛
  • 原文地址:https://www.cnblogs.com/pandas/p/4287831.html
Copyright © 2011-2022 走看看