Interface builder Apple Interface Builder:将子视图添加到UIImageView

Interface builder Apple Interface Builder:将子视图添加到UIImageView,interface-builder,uiimageview,subview,addsubview,Interface Builder,Uiimageview,Subview,Addsubview,我在Interface Bulder的帮助下创建了UIImageView。现在我想把标签放在它里面(作为它的子视图)。在代码中,我可以键入如下内容:[myUIImageView addSubview:myUILabel]但是我可以在IB的帮助下完成吗?我找到了UIView的解决方案,但找不到类似的UIImageView您无法在interface builder中向UIImageView添加子视图,原因只有Apple知道!您可以通过编程方式添加子视图,这是正确的,但是,设置自动调整大小掩码和放置子

我在Interface Bulder的帮助下创建了
UIImageView
。现在我想把标签放在它里面(作为它的子视图)。在代码中,我可以键入如下内容:
[myUIImageView addSubview:myUILabel]但是我可以在IB的帮助下完成吗?我找到了
UIView
的解决方案,但找不到类似的
UIImageView

您无法在interface builder中向UIImageView添加子视图,原因只有Apple知道!您可以通过编程方式添加子视图,这是正确的,但是,设置自动调整大小掩码和放置子视图的开销都应该在代码中处理,这很麻烦

因此,有一个简单的解决办法。不要在nib中拖动UIImageView的实例,只需拖动UIView并将其类从UIView更改为UIImageView(inspector的cmd+4选项)。默认imageView实例的nib与新UIImageView子类实例的唯一区别是:不能从nib将图像设置为新imageView(cmd+1选项)。因此,在其相应viewController的
-viewdiload
方法中,将image设置为UIImageView的此出口

通过这样做,您可以在interface builder中自由地将子视图添加到“now UIImageView”实例中,这非常简单


希望这有助于

我想补充一下答案

虽然它很糟糕,但您无法将子视图添加到
UIImageView
,您可以通过将
UIView
与透明(透明)背景合并来获得相同的效果

然后将
UIImageview
放在它前面

因此,
UIView
具有子视图,
UIImageview
UIView
的背景

我认为这是苹果的意图

以下是一个屏幕截图:

结果如下:

不要忘记将背景设置为清晰的颜色

现在,如果有人真的能给我指点一个如何做到这一点的教程,那就太好了。我花了好几个小时用这种方法做。选中的答案是一个很好的答案,但非常不直观,因为您在工作时看不清背景图像。我认为我的方法是正确的。

在最新的XCode(4.5)中,有一个将所需控件拖放到父控件的选项

这很容易。 附加的屏幕截图相同。我将标签/文本字段和按钮拖动到UIImageView,使用以下代码:

UIImage *image = [UIImage imageNamed:@"background.png"];
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
[self.view insertSubview:imageView atIndex:0];

(将background.png替换为image)(将atIndex:0替换为.index根目录中您希望插入图像和关闭的任何位置。

非常感谢您提出了一个非常有趣的想法(建议)。谢谢!我想这是因为如果您在UIImageView上放置某个内容,那么它更像是一个背景图像,而不是实际图像(就像在HTML中一样,你有一个标签指向屏幕阅读器“理解”的实际图像,或者你可以设置另一个标签的CSS属性background image,在这种情况下,图像只是样式,而不是实际内容)。但是在iOS中,没有backgroundImage属性(只是使用backgroundColor进行黑客攻击)…所以我不明白(您可以在前面提到的代码中直接向UIImageView添加一个子视图,所以这很愚蠢)。然后最好创建一个UIView,将UIImageView作为覆盖其所有大小的子视图,并将子视图添加到UIView中。@Raj没有性能问题。视图层次结构可以处理数百个子层。当然,您需要设置自动调整大小掩码,但我不认为这是一个问题。您始终必须设置自动调整大小。并且ost视图也不是问题!请注意,它仍然比创建IBOutlets和在代码中设置UI要好。是的,同意!这也是一个解决方案。问题是:我可以用IB添加UIImageView的直接子视图吗?答案是否定的。这就是为什么它被标记为正确的。我的意思是,我知道这两个“替换”而且对“做这件事的任何方法”都不感兴趣,但有可能是这个。但你的想法更好,所以向上投票!啊,这并不能完全回答你的问题。但这似乎是它应该是的方式。感谢向上投票。UIView应该包含其他视图。UIImageView应该包含图片,就这样。因此,如果你想在UIImageView中包含子视图,则这样做的方法是在UIImageView前面有一个透明的UIView。你可以用检查过的方式来做,但我确信苹果一定是有意这样做的++10 Nirav-Wow-DUH,当然!…你的简单技术为我节省了一整瓶额外的能量!我不明白。Xcode 4.6.2不会让我把它拖到<代码中>UIImageView
,无论是在画布上还是在大纲中。在大纲中,我从
UIImageView
开始,并在同一级别下的
UILabel
开始。我左键单击标签并将其向上拖动。Xcode显示了一行,如果我释放,则
UILabel
将进入该行。显然,该行永远不会缩进:它停留在root级别。当我释放时,
UILabel
可以与
UIImageView
交换位置,但永远不会进入它内部(缩进在它下面)。我尝试了一些修改器(shift,option),没有成功。我错过了什么?你不能在
界面生成器中的
UIImageView
中拖动
UIView
,甚至在
Xcode 8
中也不行。现在是Xcode 9,你仍然不能将UIView拖放到IB中的UIImageView中。