2011-02-24 4 views
0

Je suis semi-nouveau à développer pour iOS. Et quand j'essaie de personnaliser une cellule de vue de table pour mettre une image sous le texte de description, cela fonctionne, jusqu'à ce que je défile, alors il obtient tout foiré.iOS 4.2: Subview dans Tableview agissant bizarre

Quand je défiler vers le bas, puis vers le haut, l'image est dans une cellule, il ne devrait pas être./

J'ai supprimé le code parce qu'il ne fonctionnait pas. Mais ce que je faisais était de créer un UIView avec un cadre, avec un UIImageView à l'intérieur. Ensuite, je l'ajoute à cell.contentView.

Ce qui fonctionne, jusqu'à ce que je défile. Donc, quelqu'un pourrait-il aider s'il vous plaît:/

Modifier: voici à quoi il ressemble pour toute personne intéressée, je l'ai eu le travail. (Merci Jonathan)

#define LEVEL_TAG 1 
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

     static NSString *CellIdentifier = @"Cell"; 
     UIImageView *showLevel; 

     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
     if (cell == nil) { 
      cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease]; 

      showLevel = [[[UIImageView alloc] initWithFrame: CGRectMake(65, 50, 0, 11)] autorelease]; 
      showLevel.tag = LEVEL_TAG; 
      [cell.contentView addSubview: showLevel]; 

     } else { 
      showLevel = (UIImageView *)[cell.contentView viewWithTag:LEVEL_TAG]; 
     } 
     NSDictionary *dictionary = [listOfItems objectAtIndex:indexPath.section]; 

     NSArray *levelArray = [dictionary objectForKey:@"Levels"]; 
     NSString *levelValue = [levelArray objectAtIndex:indexPath.row];  

     UIImage *levelImage = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource: levelValue ofType:@"png"]]; 
     CGImageRef starImage = levelImage.CGImage; 
     NSUInteger levelWidth = CGImageGetWidth(starImage); 
     showLevel.frame = CGRectMake(65, 50, levelWidth, 11); 
     showLevel.image = levelImage; 

     return cell; 
} 
+0

une chance de voir votre code? Il y a probablement quelque chose qui ne va pas dans votre méthode cellForRowAtIndexPath – Vladimir

Répondre

0

Il est à cause de la façon dont le tableView réutilise les vieilles cellules, plutôt que de créer de nouvelles à chaque fois que l'utilisateur fait défiler, ce qui rendrait tout plus lent et moins efficace. Jetez un oeil à Listing 5-3 sur la documentation Apple sur la personnalisation de UITableViewCells, il montre comment configurer la cellule, dans l'instruction if où la cellule est réellement créée, et non où la cellule aurait pu être réutilisée.

+0

wow, merci beaucoup! A tellement aidé. Montrerez que je l'ai fait ci-dessus pour toute personne ayant besoin de savoir comment. (: –