还是直接贴代码了。
第一步:
@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];
}
}
}
搞定收工!