具有多个图像和标签不一致的自定义单元格显示

时间:2014-05-02 07:38:23

标签: ios xcode uitableview

我创建了一个自定义UITableViewCell类,用于显示我连接的多个图像,并使用界面构建器xib构建元素。我确保尺寸检查器中的imageView尺寸与我想要显示的png尺寸相匹配。这是我自定义单元格的头文件

@interface MultipleImageCell : UITableViewCell

@property (nonatomic, weak) IBOutlet UILabel *name;
@property (nonatomic, weak) IBOutlet UIImageView *type;
@property (nonatomic, weak) IBOutlet UIImageView *sold;
@property (nonatomic, weak) IBOutlet UIImageView *avatar;

@end

我没有更改单元格实现文件中的任何内容,它是自动生成的。在我的表视图控制器类中,对于cellForRowAtIndexPath,我注册了Nib并设置了新的单元格类型并使用dequeueReusableCellWithIdentifier设置了正确的标识符。然后我尝试使用一些switch语句修改自定义单元格的属性。这会导致模拟器中的单元格加载不一致。如果我关闭模拟器,再次启动它们看起来没问题,但是一旦我开始操作它们,一些图像会显示,一些不显示,或者显示错误的图像。

这是我cellForRowAtIndexPath

中的代码
//set the type for every cell
[cell.type setImage:[UIImage imageNamed:type]];

    if (sold) {
        //put in sold icon
        [cell.sold setImage:[UIImage imageNamed:@"sold"]];


        if (self.user isEqualToString:originalSender]) {

            cell.name.text = sender;
            return cell;


        } else {
            //anonymous posting

            cell.name.text = nil;
            [cell.avatar setImage:[UIImage imageNamed:@"man"]];
            return cell;
        }
    }
    //default cell
    cell.name.text = nil;
    cell.avatar.image = [UIImage imageNamed:@"man"];
    return cell;
}

2 个答案:

答案 0 :(得分:3)

在设置CustomeCell的所有属性之前,您将返回单元格。

[cell.type setImage:[UIImage imageNamed:type]];

//default cell
cell.name.text = nil;
cell.avatar.image = [UIImage imageNamed:@"man"];

if (sold) {
    //put in sold icon
    [cell.sold setImage:[UIImage imageNamed:@"sold"]];


    if (self.user isEqualToString:originalSender]) {
        cell.name.text = sender;
        cell.avatar.image = [UIImage imageNamed:senderImage]; 
        //I assume you have image for sender. 
    }
}

return cell;

答案 1 :(得分:0)

当系统回收你的细胞时,旧细胞仍然有它们的图像。

在准备要重复使用的单元格时尝试清除图像视图。在UITableViewCell子类中实现以下内容。

 - (void)prepareForReuse;
{
    self.avatar.image = nil;
    self.type.image = nil;
    self.sold.image = nil;
}