表格视图单元子类中的 UIImageView 不能作为 IBOutlet 工作

Posted

技术标签:

【中文标题】表格视图单元子类中的 UIImageView 不能作为 IBOutlet 工作【英文标题】:UIImageView in tableview cell subclass not working as IBOutlet 【发布时间】:2011-10-26 20:29:44 【问题描述】:

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

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

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

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

那么这里发生了什么?我怎样才能获得正确的出口,要么将其正确添加到文件所有者(没有键值合规投诉),要么通过表格视图单元正确连接它。非常感谢任何帮助!

亲切的问候,

雷德

【问题讨论】:

【参考方案1】:

这一行:

[[cell imageView] initWithImage:thumbnail];

听起来很奇怪。如果 imageView 已经初始化,例如通过 nib,则无需再次重新初始化(会产生不希望的结果,因为 init 必须在对象的生命周期中调用一次)。相反,如果 imageView 实例还没有被分配初始化,那么 [cell imageView] 将为 nil 并且 initWithImage: 调用将完全没有效果。

所以你说 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。它不明白您所说的“不成功”是什么意思。不应该有技巧,除非你会被这样的错误击中。

【讨论】:

以上是关于表格视图单元子类中的 UIImageView 不能作为 IBOutlet 工作的主要内容,如果未能解决你的问题,请参考以下文章

如何将 UIView(例如 UIImageView)拖放到 iPhone/iPad 表格中的单元格

选择表格视图单元格时显示自定义 UIImageView

表格单元格中的 UIImageView 不在框架原始框架内?

iOS UIImageView 约束在表格单元格中不起作用

表格视图单元格中的 ImageView 切断标签(自动布局)[关闭]

表格视图单元格中的 UIGestureRecognizer 获取 indexPath 始终返回最后一个单元格的 indexPath