os x相当于ios的rootViewController

时间:2013-08-05 19:08:24

标签: cocoa-touch cocoa rubymotion macruby

OS X相当于ios'(Ruby风格):

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

有两个方面:

  • 处理os x
  • 中缺少rootViewController
  • 相当于initWithNibName(nil,bundle:nil),在os x上失败

我正在尝试在代码中构建一个窗口(没有nib)...并遵循Pragmatic的RubyMotion程序员指南(为iOS编写)。

3 个答案:

答案 0 :(得分:5)

在我的情况下,我有一个窗口拥有的视图控制器,所以以下代码对我有用:

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

其中MyViewController是我的NSViewController子类。

答案 1 :(得分: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子类,而不是实例化。

答案 2 :(得分:1)

如果你想在iOS中重置rootViewController,可以使用以下代码:

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 在OSX中被称为 contentViewController