2013-08-05 53 views
4

会是什么OS X相当于IOS'(Ruby的风格)的:OS X等同于IOS的RootViewController的

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

有两个方面:

  • 处理在OS没有RootViewController的的X
  • 做initWithNibName相当于(零,束:无),即在OS X

失败我试图在代码中创建一个窗口(没有nib)...并遵循Pragmatic的RubyMotion程序员指南(针对iOS编写)。

回答

3

在OS X应用程序中没有“rootViewController”的概念。这是因为应用程序由一个或多个窗口和/或菜单栏组成,其中没有一个是“根”。

你可以,但是,找到一个视图控制器启动窗口控制器:

[[[self view] window] delegate]; 

如果您正在寻找调用窗口控制器上的自定义方法,它可能是更好的create a delegate,使有关的假设控制器不会让你陷入困境。

NSViewController.alloc.initWithNibName(nil, bundle: nil)等效是:

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

方法调用得到嵌套在方括号中,有多个参数的方法是简单label1:parameter1 label2:parameter2...

通常,虽然,你将有一个自定义的NSViewController子你会实例化。

+0

感谢rootViewController信息。你知道initWithNibName(nil,bundle:nil)的等价物是什么吗? – MichaelC

+0

Doh,我忽略了这个问题的一部分,我在答案中加了答案。 – BergQuester

3

就我而言,我不得不靠窗户拥有一个单一的视图控制器,所以下面的代码为我工作:

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

其中MyViewControllerNSViewController子类。

+0

尽管有多个viewControllers,我仍然可以使用这个工具 - 我只是简单地检查一下'contentViewController'是否能够被正确的子类降级,然后抓取我需要的东西 – Brickers

1

如果你想重置RootViewController的像iOS中您可以使用此代码:在OSX

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 
  • NSAppNSApplication.shared()
  • RootViewController的快捷方式被称为contentViewController