Apple Interface Builder: adding subview to UIImageView

Interface BuilderUiimageviewSubviewAddsubview

Interface Builder Problem Overview


I created UIImageView with the help of Interface Bulder. Now I want to place label inside it (as its subview). In code I can type something like: [myUIImageView addSubview:myUILabel]; But can I do it with the help of IB? I found the solution for UIView, but can't find something similar for UIImageView.

Interface Builder Solutions


Solution 1 - Interface Builder

You cannot add a subview to UIImageView in interface builder for reasons only known to Apple! You are right in saying that you can addSubview programmatically, but then, the overhead of setting autoresizing masks and placements of subviews should all be handled in code, which is cumbersome.

So there is an easy workaround. Instead of dragging an instance of UIImageView in the nib, just drag a UIView and change its class to UIImageView from UIView (cmd+4 option of inspector). The only difference you find in the nib for default imageView instance and your new UIImageView subclass instance is: you cannot set image to your new imageView from nib (cmd+1 option). So, in the -viewDidLoad method of its appropriate viewController, set image to this outlet of UIImageView.

By doing so, you are free to add subviews to your "now UIImageView" instances in interface builder, which is much easy.

Hope this helps . . .

Solution 2 - Interface Builder

I would like to add answer.

While it sucks you cannot add subview to UIImageView, you can get the same effect by incorporating UIView with transparent (clear color) background.

Then put the UIImageview BEFORE it.

So the UIView has the subviews and the UIImageview is the background of the UIView.

I think that's apple's intent.

Here is a screenshot:

enter image description here

Here is the result:

enter image description here

Don't forget to set background as clear color

enter image description here

Now if someone could actually point me to a tutorial how to do this it'll be great. I spent hours doing it the checked answered way. The checked answer is a fine answer but very unintuitive because you can't see your background image clearly while working. I think mine is the proper way to do so.

Solution 3 - Interface Builder

In latest XCode(4.5) there is an option to drag and drop the required controls to the parent.

It is quite easy. Attached screen shot for the same. I dragged the Label/TextField and Button to UIImageViewenter image description here

Solution 4 - Interface Builder

Use this code:

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

(replace background.png with image) (replace atIndex:0 with whatever place in the .index root you want to insert the image and your off.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionkpowerView Question on Stackoverflow
Solution 1 - Interface BuilderRaj Pawan GumdalView Answer on Stackoverflow
Solution 2 - Interface Builderuser4951View Answer on Stackoverflow
Solution 3 - Interface BuilderNiravView Answer on Stackoverflow
Solution 4 - Interface Builderuser2110149View Answer on Stackoverflow