0

我有一个UITableViewwhich aUIImage作为子视图添加到它的每个单元格。图片是PNG透明的。问题是当我滚动浏览时UITableView,图像会重叠,然后我会收到内存警告和其他东西。

这是配置单元格的当前代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    int cellNumber = indexPath.row + 1;
    NSString *cellImage1 = [NSString stringWithFormat:@"c%i.png", cellNumber];
    UIImage *theImage = [UIImage imageNamed:cellImage1];
    UIImageView *cellImage = [[UIImageView alloc] initWithImage:theImage];
    [cell.contentView addSubview:cellImage];

    return cell;
}

我知道删除UIImage子视图的代码如下:

[cell.imageView removeFromSuperview];

但我不知道该放在哪里。我把它放在所有的行之间;甚至在 if 语句中添加了一个 else。似乎没有工作!

4

2 回答 2

1

你只是保持这个:

 [cell.imageview setImage:theImage];

并删除:

UIImageView *cellImage = [[UIImageView alloc] initWithImage:theImage];
[cell.contentView addSubview:cellImage];
于 2012-07-06T09:15:07.920 回答
1

UITableViewCell已经附加了一个图像视图。消除:

UIImageView *cellImage = [[UIImageView alloc] initWithImage:theImage];
[cell.contentView addSubview:cellImage];

添加:

[cell.imageview setImage:theImage];

你可以走了!

结果代码将如下所示:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    UIImage *cellImage = [UIImage imageNamed:[NSString stringWithFormat:@"c%i.png", indexPath.row + 1]];
    [cell.imageView setImage:cellImage];

    return cell;
}
于 2012-07-06T09:06:16.483 回答