2009-02-13 4 views
1

Je crée un UITableViewCell personnalisé pour inclure un UIImageView et du texte associé. Je reçois les images de l'Internet et pendant que les images se chargent, j'affiche un UIImage temporaire. J'utilise un fil séparé pour obtenir le UIImage. Une fois qu'un UIImage est téléchargé, je tirais une méthode sur le thread principal pour définir l'image dans le UIImageView (obtenir l'instance de UIImageView balises à l'aide)UIImageView à l'intérieur de UITableViewCell ne se met pas à jour

Mais quoi que je fasse, les images ne sont pas modifiées. Les cellules affichent toujours des images plus anciennes (correspondant à des lignes différentes - en raison de la réutilisation des cellules) et les nouvelles images ne sont pas reflétées. Les instructions de journal montrent que la méthode pour définir l'image est appelée. J'ai même essayé de changer l'image en une image statique en willDisplayCell:forRowAtIndexPath: mais même alors, l'image ne change pas.

Modifier
J'ai essayé d'appeler reloadData sur le UITableView après avoir changé le UIImage, mais le UIImage ne change toujours pas.

est ici la pièce pertinente du Code

de cellForRowAtIndexPath

 image = [imagesArray valueForKey:[NSString stringWithFormat:@"%i",indexPath.row]]; 
     if(image == nil){ 
      //display temporary images. When scrolling stops, detach new thread to get images for rows visible 
      NSString *pth = [[NSBundle mainBundle] pathForResource:@"folder" ofType:@"png"]; 
      image = [UIImage imageWithContentsOfFile:pth]; 
      [imgView setImage:image]; 
     } 
     else{ 
      [imgView setImage:image]; 
     } 

Méthode qui est appelée sur le thread principal après une image est téléchargée

-(void)setImageInArray:(NSIndexPath *)indPath{ 
    [filesTable reloadData]; 
} 

Dans le fil, J'ajoute l'objet UIImage à imagesArray. Donc, lorsque la prochaine fois la méthode cellForRowAtIndex est appelée reloadData, le nouveau UIImage doit être affiché.

Répondre

5

Les cellules UITableView sont mises en cache, donc la modification de la cellule après son rendu n'aura aucun effet. Essayez d'envoyer un message reloadData à la table après la mise à jour de UIImageView.