Initializing another window using storyboard for OS X

Swift 3 version:

var myWindowController: NSWindowController!

override init() {
    super.init()

    let mainStoryboard = NSStoryboard.init(name: "Main", bundle: nil)
    myWindowController = mainStoryboard.instantiateController(withIdentifier: "myWindowControllerStoryboardIdentifier") as! NSWindowController
    myWindowController.showWindow(self)
}

Make sure you define myWindowController outside the function or else the window won't show up.

It's actually better to do this in init() (of AppDelegate) as you may need it earlier on.


In your Storyboard, select your second Window Controller. In the identity inspector, specify a name for this window controller, e.g secondWindowController

Then, in your app delegate, set up a property for the window controller:

@property NSWindowController *myController;

In your applicationDidFinishLaunching: method implementation, create a reference to the Storyboard. This way you get access your window controller from the storyboard. After that, the only thing left to do is to display the window by sending your window controller the showWindow: method.

#import "AppDelegate.h"

@interface AppDelegate ()

@end

@implementation AppDelegate
@synthesize myController;

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
NSStoryboard *storyBoard = [NSStoryboard storyboardWithName:@"Main" bundle:nil]; // get a reference to the storyboard
myController = [storyBoard instantiateControllerWithIdentifier:@"secondWindowController"]; // instantiate your window controller
[myController showWindow:self]; // show the window
}

@end