Frage

What would be the OS X equivalent of ios' (Ruby style) :

@window.rootViewController = NSViewController.alloc.initWithNibName(nil, bundle: nil)

There are two aspects :

  • dealing with the absence of rootViewController in os x
  • doing the equivalent of initWithNibName(nil, bundle: nil), that fails on os x

I'm trying to build a window in code (without nib)... and follow along Pragmatic's Programmer Guide to RubyMotion (written for iOS).

War es hilfreich?

Lösung 2

There is no concept of a "rootViewController" in OS X applications. This is because applications are made up of one or more windows and/or a menu bar, none of which is the "root".

You can, however, find the window controller starting from a view controller:

[[[self view] window] delegate];

If you are looking to call custom methods on the window controller, it is probably better to create a delegate so that assumptions about the controller don't get you into trouble.

The equivalent of NSViewController.alloc.initWithNibName(nil, bundle: nil) would be:

[[NSViewController alloc] initWithNibName:nil bundle:nil];

Method calls get nested in square brackets, methods with multiple parameters are simply label1:parameter1 label2:parameter2...

Usually, though, you would have a custom NSViewController subclass that you would instantiate instead.

Andere Tipps

In my case, I had a single view controller owned by the window, so the following code worked for me:

let viewController = NSApplication.sharedApplication().keyWindow!.contentViewController as! MyViewController

where MyViewController is my NSViewController subclass.

If you want to reset rootViewController like in iOS you can use this code:

let storyBoard = NSStoryboard(name: NSStoryboard.Name(rawValue:"Main"), bundle: Bundle.main)
let homeViewController = storyBoard.instantiateController(withIdentifier: NSStoryboard.SceneIdentifier(rawValue: "SIHome")) as! HomeViewController
NSApp.keyWindow?.contentViewController = homeViewController
  • NSApp is a shortcut for NSApplication.shared()
  • rootViewController is called contentViewController in OSX
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top