Add subview from a xib or another scene with storyboard
22,950
I figured out a way to do it. Described as following:
- Create a .xib file. For example: MyView.xib
- Create a objective-c class. For example: MyViewClass.h and MyViewClass.m
- Set the .xib File's Owner to the class.
- Add a UIView element on the storyboard and set the custom class to the objective-c class name (MyViewClass).
The key-point is to override the initWithCoder method in the object-c class.
- (id)initWithCoder:(NSCoder *)aDecoder { if ((self = [super initWithCoder:aDecoder])) { [self addSubview:[[[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil] objectAtIndex:0]]; } return self; }
The idea is the custom class is loaded by the storyboard and initWithCode will be called. The index 0 is the root view in the .xib interface builder.
It's kind of tricky but it works.
Author by
shiami
Updated on December 06, 2020Comments
-
shiami over 3 years
I'm new to iOS and Xcode. I can't figure out how to design a separated view and make it be added into the main UIViewController using storyboard.
I did different approaches..
- Just grab an UI object from right-bottom corner window in the xcode, and then put it onto any space area of storyboard. But I can't drop the UI object like the way with xib.
- Add a new UIViewController. Add a view into the
UIViewController
. In the main ViewController.m, I get the newUIViewController
instance in the viewDidLoad, and then[self.view addSubview:newUIViewController.view]
. But I can't see the added view. - I created a new xib file. And add a view into it. I also try to get the instance in the main
ViewController
. AndaddSubview
with the xib's view. But it also failed.
Is there a correct way or any working solution to do so?