第一步:
class="brush:objc;gutter:true;">@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]; } } }
搞定收工!