tableview单元子类中的UIImageView不能用作IBOutlet

时间:2011-10-26 20:29:45

标签: objective-c uitableview uiimageview

我有一个UITableViewCell子类,没什么特别的。我添加了几个标签和一个UIImageView。所有插座都连接到表视图单元(视图) - 而不是文件所有者。如果我将它们附加到文件所有者,那么关于不符合键值并且将它们附加到表视图单元的大量错误实际上解决了这个问题。我可以正确地处理标签。

然而,我的一个IBOutlet现在没有正确连接:UIImageView。 IBOutlet已设置,对标签有效的方法不适用于图像视图。这是一些代码:

[[cell imageView] initWithImage:thumbnail];
[self.view addSubview:[cell imageView]];

想象一下缩略图是一个UIImage,它不是零。 cell.imageView也不是。顶行不会在正确的位置(我在xib中设置图像)显示图像,尽管底线实际上将图像添加到屏幕 - 而不是在正确的位置。

那么这里发生了什么?如何正确地将插座添加到文件所有者(没有键值合规性投诉)或通过表视图单元正确连接。非常感谢任何帮助!

亲切的问候,

雷因德

1 个答案:

答案 0 :(得分:0)

这一行:

[[cell imageView] initWithImage:thumbnail];

听起来很奇怪。如果imageView已经初始化,例如通过nib,然后不需要再次重新初始化(具有不期望的结果,因为init必须在对象的生命中被调用一次)。相反,如果imageView实例还没有alloc-init,那么[cell imageView]将为nil,而initWithImage:call将完全没有效果。

所以你说cell.imageView不是nil,所以你的init methodWithImage:方法可能会改变图像视图的框架,这就解释了为什么它被移动到了你的xib之外的其他地方(可能它已被放置在细胞视图来源)。不要忘记从xib加载图像时,会调用initWithCoder:方法。

你可以做的就是这个代码(未经测试)用新单元替换现有单元格:

CGRect oldFrame = cell.imageView.frame;
UIImageView *newImageView = [[[UIImageView alloc] initWithImage:thumbnail] autorelease];
newImageView.frame=oldFrame;
[self.view addSubview:newImageView];
cell.imageView=newImageView;

当然这个解决方案并不优雅,如果你能解决你的KVC问题会更好。你得到这些错误的原因我不清楚,我应该看到代码和xib。它不明白你的意思是“不做伎俩”。不应该有诡计,除非你会遇到像这样的错误。