2013-08-05 38 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