2014-09-25 27 views
0

我使用下拉菜單創建了一個statusBar應用程序。我想從該下拉菜單中打開一個settingsWindow。我用自己的ViewController製作了設置窗口。如何使用Swift中的AppDelegate從自己的ViewController打開一個新窗口

問題是,我無法弄清楚如何實例化並顯示我所做的settingsWindow。我試圖按照互聯網上的每一個線索,沒有任何成功。

我的ViewController:

class SettingsViewController: NSViewController { 
    @IBOutlet var ipAddress: NSTextField! 
    @IBOutlet var port: NSTextField! 

    @IBAction func connect(sender: AnyObject) {} 
    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 
} 

我的AppDelegate:

class AppDelegate: NSObject, NSApplicationDelegate { 
    @IBOutlet var statusMenu: NSMenu! 
    var statusItem: NSStatusItem? 
    var tcpService: TcpService = TcpService() 

    func applicationDidFinishLaunching(aNotification: NSNotification?) { 

     let bar = NSStatusBar.systemStatusBar() 

     statusItem = bar.statusItemWithLength(20) 
     statusItem!.menu = statusMenu 
     statusItem!.image = NSImage(byReferencingFile: NSBundle.mainBundle().pathForResource("16*16", ofType: "png")) 
     statusItem!.highlightMode = true 

     tcpService.initOutputStream("192.168.1.1", Port: 8888) 
    } 

    func applicationWillTerminate(aNotification: NSNotification?) { 
     // Insert code here to tear down your application 
    } 
    @IBAction func openSettings(sender: AnyObject) { 
     // open settings for ip and port optional port 
    } 
} 
+0

爲什麼不使用模式窗口? – derdida 2014-09-25 22:56:41

回答

-1

我不是100%我完全理解你的問題,但假設你使用的是故事板(你應該如果你是開始新鮮),添加幾行到您的applicationDidFinishLaunching方法將有所幫助:

 var myWindow: NSWindow? = nil 
     let storyboard = NSStoryboard(name: "Main",bundle: nil) 
     let controller: SettingsViewController = storyboard?.instantiateControllerWithIdentifier("SettingsViewController") as SettingsViewController 
     myWindow = controller.window 
     myWindow?.makeKeyAndOrderFront(self) 

不要忘記在IB中設置Storyboard ID(在SettingsViewController上面的示例中)!

+2

我不認爲這個代碼的作品。 SettingsViewController沒有名爲'window'的成員。有什麼建議嗎? – iphaaw 2015-06-19 12:16:45

0

在SWIFT 3:

 var myWindow: NSWindow? = nil 
     let storyboard = NSStoryboard(name: "Main",bundle: nil) 
     let controller: EditorViewController = storyboard.instantiateController(withIdentifier: "editorViewController") as! ViewController 
     myWindow = NSWindow(contentViewController: controller) 
     myWindow?.makeKeyAndOrderFront(self) 
     let vc = NSWindowController(window: myWindow) 
     vc.showWindow(self) 
相關問題