如何在UITableViewCell中替换imageView?

时间:2011-09-01 21:53:24

标签: iphone cocoa-touch

我有一个继承自UIImageView的类型,但增加了一些额外的功能。我想将它作为图像视图放入我的UITableViewCells中,但我不想做一个全新的单元格布局,以便我可以添加这个图像。

当我尝试直接设置图像视图(self.imageView = myImageView)时,我收到编译错误,告诉我imageView是只读的。有没有办法解决这个问题,还是我需要编写一个新的表格视图单元类?

为了更清晰:

@interface MyImageViewClass : UIImageView {

}

@end

==========================

@interface MyTableCellClass : UITableViewCell {

}

@end

@implementation MyTableCellClass

-(void) setupCell
{
    MyImageView *imageView = [[[MyImageView alloc] init] autorelease];
    self.imageView = imageView;  // <---- THIS THROWS A COMPILE ERROR
}

@end

3 个答案:

答案 0 :(得分:4)

这里有几种选择。

  • 您可以将自己的图像视图插入到与普通图像视图相同位置的单元格中。在tableView:willDisplayCell:forRowAtIndexPath:中,您可以将图片视图的框架设置为与默认框架相匹配(这样您就可以获得Apple的布局逻辑)。然后只需为图像单元设置图像而不是默认图像。

  • 您也可以这样做,但会在tableView:willDisplayCell:...中“窃取”图片。只需设置myImageView.image=imageView.image并清除imageView的图片即可。这会使它更透明但更神奇。

  • 获得幻想,ISA将imageView调到你的班级。您必须在您的班级中没有额外的ivars或合成属性才能使其工作,否则您获得的崩溃将是奇怪的。搜索“isa swizzle”或“class swizzle。”

答案 1 :(得分:0)

告诉我我是不是错,而是“自我”。属性引用为该类的变量返回一个getter和一个setter,对吗?您是不是在代码中有效地说,imageView = imageView?

尝试将MyImageView * imageView的名称更改为imageView2。即使它没有解决问题,也可以避免潜在的混淆。

答案 2 :(得分:-2)

你会这样做:

self.imageView.image = myImage;

或:

[self.contentView addSubview:myImageView];