views:

91

answers:

1

i'm using the customised cell to Show an image. But, when i add an image to the first row, its get being loaded every 4th row. What might be the problem? I'm picking the image from the iphone photo library using uiimagepickercontroller and is giving it to the first cell of the table.

- (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;
}
+1  A: 

The iPhone SDK UITableView optimizes UITableViewCell creation by reusing cells that aren't in view instead of recreating new ones all the time. That's done through your call of dequeueReusableCellWithIdentifier:.

In tableView:cellForRowAtIndexPath:, you need to ensure that the cell you dequeue gets cleared so it only contains new cell content. In this case, having a cell.imageView.image = nil before your if (r == 1) ... statement will suffice.

notnoop