Wielopoziomowy UITableView?

Autor:cambron elsey

Należy wykonać wiele tabel. Na przykład, na początku mamy tylko 3 komórkę
cc9f19a769b613a2fcaa7337ab02c1fa.png


Tapaya najpierw trzeba dodać drugą komórkę na poziomie 1d09805ad46be36022dc59a7bb3b88f1.png


A poza poziomem 3

Rozumiem, że odbywa się to przez proste insertRowsAtIndexPaths Ale moje dane pochodzą z różnych tablic. Myślę, że musisz użyć jakiegoś stanu dla każdego przypadku. Ale nie mogę zrozumieć, jak. Może ktoś zrobił coś takiego? Udostępnij fragmenty;)

Odpowiedzi

sarah funke donovan
Zrobiłem to.

Przy wejściu do Mississima (NSArray) każdy element ma poziom. Przebiegnij tablicę i utwórz widok z przesunięciem w lewo. Potem wszystko wepchnięto w UITableViewCell.

 
-(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
    CGRect cellTextRect = 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];
    }
  }
}


następnie

 
-(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;	
}
Odpowiedzi:
* z przesunięciem w lewo
z przesunięciem w prawo w zależności od poziomu - mojgan
Więc zawiesiłem metody, które filtrowały | posortowały tablicę i przeładowałem sekcję - payam
Co za horror. Niż standardowe UITableViewCellStyleSubtitle, cell.textLabel, cell.detailTextLabel, cell.imageView, cell.indentationLevel i cell.indentationWidth nie odpowiadają? - danceluvr211
Nie pamiętam dokładnie, czego nie zrobili. Pokaż działający przykład tego, co mówisz. Z dynamiczną wysokością bloku, w moim przypadku, komórki o różnych wysokościach w zależności od liczby tekstu. - anthony renfro
Przetwarzanie strumieniowego przesyłania wideo :: Doradztwo książki na Rails 3 w języku rosyjskim lub angielskim :: WordPress 3.0, identyfikator bieżącej kategorii :: Czy można uzyskać dostęp do OpenLDAP przez MAPI? Lub w jaki sposób OpenLDAP może udawać GAL? :: Prosta klasa PHP dla Twitter API w OAuth?
Zostaw odpowiedź
Linki