Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

os x equivalent to ios's rootViewController

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).

like image 336
MichaelC Avatar asked Aug 05 '13 19:08

MichaelC


2 Answers

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.

like image 58
Senseful Avatar answered Oct 22 '22 08:10

Senseful


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.

like image 42
BergQuester Avatar answered Oct 22 '22 07:10

BergQuester