Posted on 2013-11-12 17:22:35+00:00
You're zipping along prototyping your app using Interface Builder and storyboards. But now you want to reuse a scene all over the place. What do you do? Combine the power of storyboards and XIBs by mixing them!
You could segue from many different areas, but unless the view controller
behaves quite similarly, you'll soon run into issues with IBOutlet
and
IBAction
mappings. The best solution? Use a XIB for those tricky areas.
You could also have the same Controller.h
and Controller.m
files, but build
the scene in Interface Builder multiple times. But this is a pain to maintain
and error-prone.
How do we do this? Quite simple actually. As always, a few assumptions first:
UITableViewController
somewhere in the storyboard.First off, create your new view controller, making sure it subclasses
UIViewController
and that you tell Xcode to use a XIB. Let's call it
CustomViewController
. Feel free to add buttons and labels to your XIB.
Connect outlets and actions as necessary.
Now head over to your main storyboard. Add an empty UIViewController
onto the
canvas and change the identity to CustomViewController
. Now here's the key
part: using the document outline1, find the View
listed under Custom View
Controller
. Highlight it, and delete it.
And that's it! Now the storyboard will load your custom XIB whenever it segues to this view.
So what are the advantages? You can create segues back from this view to other parts of the storyboard. Granted, you'll have to call them manually, but this is a huge advantage.
Try it: control-drag from your placeholder controller in the storyboard back to
the UITableViewController
. Highlight the created segue, and in the Attribute
Inspector, rename it to backToTable
. Then in an IBAction
method inside
CustomViewController
, call:
[self performSegueWithIdentifier:@"backToTable" sender:self];
Moreover, if all these controllers are embedded in UINavigationController
,
you'll get all these segues for free!
That's the side bar on the left when using Interface Builder. ↩
Thank you for this great blog post. I tried your solution and it works excellent when using one single xib file. But adding multiple Views, based on your blog post, crashes the application every time. Do you have any idea how to solve this? Thank you in advance for your response.
I'm afraid I'm not sure how to address this. Thanks for reading.
Hey, I tried to follow your steps, but it seems like storyboard in not loading my VC's xib, but rather showing an empty, transparent view... did you ever encounter such a behaviour? any suggestions?