Did a similar.
\r
At the entrance missive (NSArray), each element has a level. Ran through the array and created vewwy with a shift to the left. Then it's all shoved in a UITableViewCell.
\r
\r
-(void) flateCommentsData:(NSArray *)_data withLevel:(NSInteger)level { NSEnumerator * dataEnum = [_data objectEnumerator]; NSDictionary * commentData; while (commentData = [dataEnum nextObject]) { SModelComment * commentModel = [[SModelComment alloc]init]; [commentModel set:@"id" withValue:[commentData objectForKey:@"id"]]; [commentModel set:@"text" withValue:[commentData objectForKey:@"text"]]; [commentModel set:@"userId" withValue:[commentData objectForKey:@"userId"]]; [commentModel setLevel:level]; CGRect cellRect = CGRectMake(commentModel.level*5, 0, 320 - commentModel.level*5, 0); UIView * cellView = [[UIView alloc] initWithFrame: cellRect]; //add avatar SModelUser * user = [SModelUserPeer loadObjectById:[commentModel get:@"userId"]]; UIImageView * avatarView = [[UIImageView alloc] initWithImage: user.smallAvatar.image ]; avatarView.frame = CGRectMake(5, 7, 35, 35); [cellView addSubview:avatarView]; //add username UILabel * usernameLabel = [[UILabel alloc] initWithFrame:CGRectMake(45, 5, cellRect.size.width - 75, 20)]; usernameLabel.font = [UIFont boldSystemFontOfSize:14.0]; usernameLabel.text = [user get:@"fullName"]; [cellView addSubview:usernameLabel]; //add text CellTextRect CGRect = CGRectMake(45, 25, cellRect.size.width - 75, 0); UILabel * cellTextLabel = [[UILabel alloc] initWithFrame:cellTextRect]; cellTextLabel.text = [commentModel get:@"text"]; cellTextLabel.font = [UIFont systemFontOfSize:12.0]; cellTextLabel.numberOfLines = 0; [cellTextLabel sizeToFit]; cellTextLabel.backgroundColor = [UIColor whiteColor]; [cellView addSubview:cellTextLabel]; CGRect textFrame = cellTextLabel.frame; textFrame.size.height = textFrame.size.height + 10 + usernameLabel.frame.size.height ; textFrame.size.height = textFrame.size.height > 50 ? textFrame.size.height : 50; cellRect.size.height = textFrame.size.height; cellView.frame = cellRect; NSMutableDictionary * item = [[NSMutableDictionary alloc] initWithCapacity:2]; [item setObject:cellView forKey:@"view"]; [item setObject:commentModel forKey:@"model"]; [commentsList addObject:item]; if ([commentData objectForKey:@"childs"]) { [self flateCommentsData:[commentData objectForKey:@"childs"] withLevel:level+1]; } } }
\r
\r
then\r
\r
-(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { NSDictionary * item = [commentsList objectAtIndex:indexPath.row]; UIView * cellView = [item objectForKey:@"view"]; SModelComment * commentModel = [item objectForKey:@"model"]; NSString * CellIdentifier = [NSString stringWithFormat:@"comment_cell_%d", [commentModel get:@"id"]]; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; } cell.accessoryType = UITableViewCellAccessoryDisclosureindicator; [cell.contentView addSubview:cellView]; return cell; }