2009-12-01 3 views
0

J'utilise la cellule personnalisée pour afficher une image. Mais, quand j'ajoute une image à la première rangée, son get être chargé tous les 4 rangs. Quel pourrait être le problème? Je choisis l'image de la photothèque de l'iphone en utilisant uiimagepickercontroller et la donne à la première cellule de la table.uitableviewcell problem

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo { 
    CGSize newSize = CGSizeMake(80, 80); 
    UIGraphicsBeginImageContext(newSize); 
    [image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)]; 
    UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    imageView.image = newImage; 

    [picker dismissModalViewControllerAnimated:YES]; 
} 



- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
    return 1; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *CustomCellIdentifier = @"CustomCellIdentifier"; 
    CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:CustomCellIdentifier]; 
    if (cell == nil) { 
     NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:nil options:nil]; 
     for (id currentObject in nib){ 
      if ([currentObject isKindOfClass:[CustomCell class]]){ 
       cell = (CustomCell *)currentObject; 
       //[cell loadFullComments:[latestFMLComments objectAtIndex:indexPath.row]]; 
       break; 
      } 
     } 
    } 

    NSUInteger r= [indexPath row]; 
    NSUInteger s= [indexPath section]; 
    //[cell setText:[NSString stringWithFormat:@"I am cell %d", indexPath.row]]; 
    // NSInteger r= indexPath.row; 
    if(r == 1) 
     if (s== 0){ 
      UIImage *img=imageView.image; 
      cell.imageView.image = img; 
     } 
    return cell; 
} 
+0

Je suis également confronté à ce problème ... comment l'avez-vous résolu? –

Répondre

1

L'iPhone SDK UITableView permet d'optimiser la création UITableViewCell en réutilisant les cellules qui ne sont pas visibles au lieu de recréer de nouvelles tout le temps. C'est fait par votre appel de dequeueReusableCellWithIdentifier:.

Dans tableView:cellForRowAtIndexPath:, vous devez vous assurer que la cellule que vous supprimez est effacée afin qu'elle contienne uniquement du nouveau contenu de cellule. Dans ce cas, avoir un cell.imageView.image = nil avant votre déclaration if (r == 1) ... suffira.