Iphone 如何替换UITableViewCell中的imageView?

Iphone 如何替换UITableViewCell中的imageView?,iphone,cocoa-touch,Iphone,Cocoa Touch,我有一个从UIImageView继承的类型,但添加了一些额外的功能。我想把它作为图像视图放到我的UITableViewCells中,但不想为了添加这个图像而做一个全新的单元格布局 当我试图直接设置图像视图时(self.imageView=myImageView),我收到一个编译错误,告诉我imageView是只读的。有没有办法解决这个问题,或者我需要编写一个新的表视图单元类 为更清楚起见: @interface MyImageViewClass : UIImageView { } @end

我有一个从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
@接口MyImageViewClass:UIImageView{
}
@结束
==========================
@接口MyTableCellClass:UITableViewCell{
}
@结束
@MyTableCellClass的实现
-(无效)设置单元
{
MyImageView*imageView=[[[MyImageView alloc]init]autorelease];
self.imageView=imageView;//您可以执行以下操作:

self.imageView.image = myImage;
或:


如果我错了,请告诉我,但是“self.”属性引用会返回该类变量的getter和setter,对吗?您的代码中不是说imageView=imageView吗


尝试将MyImageView*imageView的名称更改为imageView2。即使它不能解决问题,也可以防止潜在的混淆。

这里有几个选项

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

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

  • 使用fancy和ISA swizzle将
    imageView
    切换到您的类中。您的类中必须没有额外的IVAR或合成属性才能正常工作,否则您会遇到奇怪的崩溃。搜索“ISA swizzle”或“class swizzle”


我不想替换映像。我想替换imageView。您不能替换imageView,它是只读的。您可以替换映像或忽略现有的self.imageView并添加另一个UIImageView。不,imageView是一个局部变量。这“隐藏”了名为imageView的实例变量(如果有的话)。但这可能会造成混淆。
[self.contentView addSubview:myImageView];