2010-03-15 5 views
0

Je me demande s'il est possible d'ajouter du contenu de cellule à un uitableview basé sur l'index de ligne?cellule personnalisée basée sur l'index de ligne iphone

Par exemple, s'il s'agit de la première cellule (ligne 0), je souhaite ajouter une image et du texte. Si c'est la deuxième rangée, je voudrais ajouter un bouton. Pour toutes les autres lignes, je voudrais juste ajouter une ligne de texte.

J'ai essayé d'utiliser indexPath.row. Cela a fonctionné la première fois mais quand je fais défiler hors de l'écran et puis recule ma première image disparaît.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    PromoListItem *promo = [promoList objectAtIndex:indexPath.row]; 

    static NSString *CellIdentifier = @"Cell"; 

    AsyncImageView *asyncImageView = nil; 
    UILabel *label = nil; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    if(indexPath.row==0) 
    { 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
     CGRect frame; 
     frame.origin.x = 0; 
     frame.origin.y = 0; 
     frame.size.width = 100; 
     frame.size.height = 100; 

     asyncImageView = [[[AsyncImageView alloc] initWithFrame:frame] autorelease]; 
     asyncImageView.tag = ASYNC_IMAGE_TAG; 
     [cell.contentView addSubview:asyncImageView]; 


     frame.origin.x = 110; 
     frame.size.width =100; 
     label = [[[UILabel alloc] initWithFrame:frame] autorelease]; 
     label.tag = LABEL_TAG; 
     [cell.contentView addSubview:label]; 
     cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 
    } else { 
     asyncImageView = (AsyncImageView *) [cell.contentView viewWithTag:ASYNC_IMAGE_TAG]; 
     label = (UILabel *) [cell.contentView viewWithTag:LABEL_TAG]; 
    } 

    NSURL *url = [NSURL URLWithString:promo.imgurl]; 

    [asyncImageView loadImageFromURL:url]; 

    label.text = promo.artistname; 
    }else 

    { 

     if (cell == nil) { 
      cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
      CGRect frame; 
      frame.origin.x = 0; 
      frame.origin.y = 0; 
      frame.size.width = 100; 
      frame.size.height = 100; 

      //asyncImageView = [[[AsyncImageView alloc] initWithFrame:frame] autorelease]; 
     // asyncImageView.tag = ASYNC_IMAGE_TAG; 
     // [cell.contentView addSubview:asyncImageView]; 


      frame.origin.x = 110; 
      frame.size.width =100; 
      label = [[[UILabel alloc] initWithFrame:frame] autorelease]; 
      label.tag = LABEL_TAG; 
      [cell.contentView addSubview:label]; 
      cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 
     } else { 
     // asyncImageView = (AsyncImageView *) [cell.contentView viewWithTag:ASYNC_IMAGE_TAG]; 
      label = (UILabel *) [cell.contentView viewWithTag:LABEL_TAG]; 
     } 

     //NSURL *url = [NSURL URLWithString:promo.imgurl]; 

     //[asyncImageView loadImageFromURL:url]; 

     label.text = promo.artistname; 



    } 

    return cell; 
} 

Répondre

0

Comment personnalisé voulez-vous ces cellules? Si vous ajoutez uniquement du texte, des images et des boutons accessoires, vous pouvez créer la cellule en dehors de votre vérification de ligne, puis ajouter les éléments nécessaires dans ces instructions if.

cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
    NSUInteger row = [indexPath row]; 
    switch(row) { 
     case 0: 
      cell.textLabel.text = @"row 0"; 
      cell.image 
      break; 
     case 1: 
      cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 
      break; 
     default: 
      cell.textLabel.text = [NSString stringWithFormat:@"row %d",row]; 
      break;  
    } 

    return cell; 

Cependant, la ligne changera lorsque vous commencez à recycler vos cellules, vous voudrez peut-être avoir quelque chose dans les données réelles qui indique comment la cellule doit se comporter.

+0

Merci. Je pense que je vais abandonner cette approche. Je voulais initialement 6 cellules. La cellule 0 avait une image et quelques grandes étiquettes et l'autre 5 avait juste du texte. Cela a bien fonctionné lorsque l'application se charge, mais une fois que vous commencez à défiler, l'image de la ligne 0 disparaît et une partie se termine dans la cellule 6. Au lieu d'essayer UIImage et une tableview avec 5 cellules à un UIViewController pour tout faire dans un UITableViewController – dubbeat

+0

ouais si vous utilisez moins de 10 cellules, ne vous inquiétez même pas de les mettre en file d'attente. –

Questions connexes