2015-08-29 12 views
0

所以我在這裏試圖擺脫@NSApplicationMain來熟悉事情如何更深入地工作。 我在這裏發現了這個不錯的答案OSX application without storyboard or xib files using Swift沒有@NSApplicationMain的OSX應用程序

但是,它不太工作! 這是奇怪的結果:視圖沒有鏈接到窗口,此外,窗口不是它應該在的地方!

圖像都可以在這裏http://imgur.com/e4EXnpW

發現我開始了Xcode項目,而無需使用情節串連圖板,然後創建main.swift,AppDelegate.swift,ViewController.swift,並粘貼每個人提供的內容。然而它不工作。

有人可以提供一個可靠的方式來啓動一個OSX應用程序沒有 @ NSApplicationMain?

回答

1

它看起來像你的代碼實際上工作,但還有一些其他事情你需要做,以使其按照你想要的方式工作。在Interface Builder中有一個窗口是從MainMenu.xib加載的 - 這是標題欄中帶有「911」的窗口。您已經獲得了以編程方式創建的第二個窗口。這是屏幕左下角的窗口。

首先,看起來您的MainMenu.xib文件中仍然有Window。點擊MainMenu.xib,當它在Interface Builder中打開時,查看左側窗格中的項目。我猜測有一個Window圖標。你想點擊並刪除它。

之後,您將只在左下角有一個窗口。它看起來像一個未連接到窗口的「視圖」,因爲您尚未配置窗口的styleMask屬性。你可能需要一個styleMask看起來像這樣:

let styleMask = NSTitledWindowMask 
       | NSClosableWindowMask 
       | NSMiniaturizableWindowMask 
       | NSResizableWindowMask 

你說的那個窗口也不是它應該是。我不知道你希望它在哪裏,但是當你初始化它時,你可以通過改變參數contentRect來改變它的位置和大小。做一個NSRect位置和大小,你想要你的窗口,其命名爲方便喜歡myRect,然後初始化窗口像這樣(這是假設你定義從上面的styleMask常數):

newWindow = NSWindow(contentRect: myRect, styleMask: styleMask, backing: NSBackingStoreType.Buffered, defer: false) 

這應該做它。有關main.swift的替代版本,請參閱this gist on github

+1

非常感謝您的理解!欣賞它 – toinewx