如何在tableview中为每个单元格放置图像?

时间:2011-07-26 05:06:55

标签: iphone objective-c ios uitableview

开发一个应用程序。我将imageview放在每个tableview单元格中,如

-(UITableViewCell *)tableView:(UITableView *)tableView
        cellForRowAtIndexPath:(NSIndexPath *)indexPath {

          static NSString *CellIdentifier = @"Cell";
          UITableViewCell *cell = [tableView
                    dequeueReusableCellWithIdentifier:CellIdentifier];

    itemimageview=[[UIImageView alloc]initWithFrame:CGRectMake(5, 8, 75, 70)];
    itemimageview.image=[UIImage imageNamed:@"thumb_mdpi.png"];
    itemimageview.userInteractionEnabled = YES;
    [cell.contentView addSubview:itemimageview];
    return cell;
}

当你点击任何一行时,我们从我们的iPhone相机中获取图像。为此,我在didSelectROw方法中编写以下代码。

UIImagePickerController *imagePicker = [[[UIImagePickerController alloc] init]
                                                                  autorelease];
imagePicker.sourceType=UIImagePickerControllerSourceTypeCamera;
//imagePicker.allowsImageEditing = NO;
imagePicker.delegate = self;
[self presentModalViewController:imagePicker animated:YES];

在我使用UIIMagePickerController委托方法之后

- (void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary *)info {
    UIImage* image = [info objectForKey:UIImagePickerControllerOriginalImage];

    NSLog(@"image selected");
    itemimageview.image =image;
    [self dismissModalViewControllerAnimated:YES];
}

但我的问题是在选择图像后,该图像将仅显示在最后一个单元格。如果您选择第一行并拍摄图像,那么该图像将出现在最后一行。所以请告诉我有什么变化我获取每一行图像的代码。

2 个答案:

答案 0 :(得分:0)

问题是您将itemimageview设置为最近单元格内的图像视图,每次绘制一个单元格时,从委托方法中抓取tableview,因此itemimageview将包含tableview绘制的最后一个图像。

为了解决这个问题,您必须确保更新实际点击的单元格的图像视图。我认为最简单的方法是使用Apple的默认单元格imageview cell.image。或者你可以创建一个UITableViewCell的子类来跟踪和绘制UIImageView。然后,您更改所选单元格中的图像。

无论哪种方式,您都需要跟踪该类中选择的单元格。一种方法是将UITableViewCell selectedCell;放入.h。然后在您的didSelect方法中selectedCell = [self cellForRowAtIndexPath:indexPath];,然后在您的图片委托中使用selectedCell.image = image

很抱歉,如果这很难理解,对于一个中等复杂的问题,这是一个简短的答案。有很多方法可以解决这个问题。

答案 1 :(得分:0)

您可以按照以下步骤实现此目的: 1.首先,当用户单击一个单元格时,将行号(indexPath.row)存储在整数变量中。 2.一旦从相机获取图像,将其存储在UIImage中。 3.现在你知道要更新的行,你有你的image.Call在didFinishPickingMediaWithInfo委托方法结束时的UITableView的reloadData方法。 4.ReloadData方法随后将调用cellForRowAtIndexPath方法。有这样的条件:

if(indexPath.row==clickedRow){
  //Create the imageView here and then assign the image obtained from the camera to it.
  imageView.image=cameraImage;
  [cell.contentView addSubView:imageView];

} 其中clickedRow是整数变量,用于保存用户在didSelectRowAtIndexPath方法中单击的行号。

希望这有帮助。