NEW! Pre-order my latest book, Testing Swift! >>

How to use storyboard references to simplify your storyboards

Paul Hudson       @twostraws

Storyboards deliver useful features, such as being able to see a lot of your user interface side-by-side and being able to design static cell designs for your table and collection views. However, they can also cause havoc with teams, because two developers attempting to modify the storyboard at the same time will immediately hit source control problems.

Fortunately, Interface Builder comes with a simple solution in the form of storyboard references: links that connect one storyboard to another, using any identifier or presentation segue you want. They let you break up one huge storyboard into several smaller ones, and in doing so also allow you to re-use scenes more easily.

Storyboard references are easy to use, but don’t get a lot of use because they were introduced four years(!) after storyboards – a lot of folks either decided they didn’t like the initial storyboard implementation and haven’t checked back since, or still use the same approach they learned back in iOS 5.

Using storyboard references takes three steps:

  1. Create a new storyboard in your app, e.g. Subscribe.storyboard. Inside there create a view controller however you need, and give it a storyboard identifier.
  2. In Main.storyboard, drag out a storyboard reference object. In the attributes inspector select your new storyboard from the Storyboard dropdown, then enter your target storyboard identifier in the Referenced ID box.
  3. That storyboard reference can now be treated like a regular view controller, so you can make connections to it such as a Show segue.

Xcode will check your configuration at build time, so if you try to reference a storyboard identifier that doesn’t exist your project will refuse to build.

While storyboard references do solve the problem of storyboards becoming unwieldy and tricky with source control, they don’t solve the problem of storyboards forcing your app to flow in a certain direction. For that you should consider something like the coordinator pattern instead.

Available from iOS 9.0

Did this solution work for you? Please pass it on!

Other people are reading…

About the Swift Knowledge Base

This is part of the Swift Knowledge Base, a free, searchable collection of solutions for common iOS questions.

Upgrade to the premium experience

Get all 40 projects in PDF and ePub, plus exclusive content that will take your Swift learning to the next level – buy the Hacking with Swift book today!

Buy Testing Swift Buy Practical iOS 12 Buy Pro Swift Buy Swift Design Patterns Buy Swift Coding Challenges Buy Server-Side Swift (Vapor Edition) Buy Server-Side Swift (Kitura Edition) Buy Hacking with macOS Buy Advanced iOS Volume One Buy Advanced iOS Volume Two Buy Hacking with watchOS Buy Hacking with tvOS Buy Hacking with Swift Buy Dive Into SpriteKit Buy Swift in Sixty Seconds Buy Objective-C for Swift Developers Buy Beyond Code

Was this page useful? Let me know!

Click here to visit the Hacking with Swift store >>