删除tableview的所有子图像视图

时间:2010-10-16 07:45:50

标签: iphone uitableview subview

我正在使用表格视图并根据选项是否正确将小图像(交叉箭头和接受箭头图像)添加到每个单元格的右侧....

....现在我的表重新加载了很多次......因为每个单元格都会重复图像....

我的意思是如果cell_1具有接受图像..如果表格重新加载,如果cell_1的值发生变化并且需要cross_arrow图像......那么两个图像都可以在那里看到......(旧版本上面的新图像)....

我认为这是由于上次添加了子视图而未被删除..

请告诉我如何删除旧图片

这是我的一些代码,它将图像添加到cell ...在tableView

的委托方法中
UIImageView *image =[[UIImageView alloc]initWithFrame:CGRectMake(260,5,40,40)];
if(correct)
    [image setImage:[UIImage imageNamed:@"right.png"]];
else
    [image setImage:[UIImage imageNamed:@"wrong.png"]];
image.autoresizingMask;
image setBackgroundColor:[UIColor clearColor]];
[cell addSubview:jimage];
[jobStatus release];

请注意我只能使用我的图像而不是桌子的配件类型..

并且我的表视图中没有固定数量的行(在运行时创建)。

因此我也不能使用类imageView。

请帮助

2 个答案:

答案 0 :(得分:1)

设置UIImageView的标记,以便稍后使用

进行访问
[imageView setTag:10];

然后,您可以通过调用

从表格视图单元格更改图像视图的图像
[[tableViewCell viewWithTag:10] setImage:[UIImage imageNamed:@"wrong.png"]];

另一种解决方案:在单元格右侧显示图像,您可以设置表格视图单元格的附件视图

[tableViewCell setAccessoryView:imageView];

然后让您使用

访问图像视图
[(UIImageView*)tableViewCell.accessoryView setImage:...];

答案 1 :(得分:1)

使用类似于将单元格出列的方法:向单元格询问其imageView,如果不存在则创建它。

#define kTagCellImageView 42

- (UITableViewCell *)tableView:(UITableView *)tableView_ cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"EditorCell";

    UITableViewCell *cell = [tableView_ dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }

    UIImageView *imageView = [cell viewWithTag:kTagCellImageView];
    if (imageView == nil) {
        imageView = [[UIImageView alloc]initWithFrame:CGRectMake(260,5,40,40)];
        imageView.backgroundColor = [UIColor clearColor];
        imageView.tag = kTagCellImageView;
        [cell addSubview:imageView];
    }
    if (correct)
        [imageView setImage:[UIImage imageNamed:@"right"]];
    else 
        [imageView setImage:[UIImage imageNamed:@"wrong"]];
    cell.textLabel.text = [[textLabels objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];
    return cell;
}