uitableviewcell problem
-
22-07-2019 - |
Question
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;
}
Solution
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.