如何在表格视图中放置每个单元格的图像?

Posted

技术标签:

【中文标题】如何在表格视图中放置每个单元格的图像?【英文标题】:How to place the image for every cell in tableview? 【发布时间】:2011-07-26 05:06:54 【问题描述】:

我正在开发一个应用程序。我将图像视图放置在每个表格视图单元格中,例如

-(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];

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

【问题讨论】:

您可以通过在代码上添加断点来简单地检查。或者您使用 switch case 并编写代码,例如单击第一行然后显示此图像,然后选择第二行时显示此图像。我认为您有任何解决方案。 【参考方案1】:

您可以通过以下步骤实现此目的: 1.首先当用户单击一个单元格时,将行号(indexPath.row)存储在一个整数变量中。 2.从相机获取图像后,将其存储在 UIImage 中。 3.现在您知道要更新的行并且您有您的图像。在 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 方法中单击的行号。

希望这会有所帮助。

【讨论】:

我使用了你的代码。但是在将图像分配给选定的行时,我收到了类似于程序接收信号的错误:“EXC_BAD_ACCESS”。如何解决这个问题 检查是否两次释放imageview对象。两次释放对象可能会导致这种崩溃。 @Naresh 或者你可能正在释放一个你没有分配的对象。 我为imageview分配了内存并释放了那个 你能把你的代码贴出来吗?更容易发现错误所在。【参考方案2】:

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

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

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

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

【讨论】:

以上是关于如何在表格视图中放置每个单元格的图像?的主要内容,如果未能解决你的问题,请参考以下文章

表格视图单元格内的 UIImage

如何动态更改表格视图单元格的颜色

故事板自动布局将视图放置在表格单元格中,并将尾随到超级视图约束固定到最左侧

如何删除不可见的 tableview 单元格的下载图像。在ios中

使 UIButton 保持在表格视图 rss 提要单元格的顶部 [重复]

如何在不丢失表格视图单元格的情况下将现有集合视图添加到表格视图