2015-06-12 38 views
1

我正在構建一個聊天應用程序,爲此我有一個NSWindow的插座。現在我想打開窗口的多個實例。我該怎麼做?我沒有使用窗口控制器makeKeyAndOrderFront:方法只打開一個實例打開NSWindow的多個實例

請幫助我,我找不到它的任何地方

+0

請大家幫忙,而不是改變fomatting – Bobby

+0

使用NSWindowController最好的解決和實例每個窗口之一。然後每個實例加載窗口的NIB並打開它。您不能在NIB中創建同一個窗口的第二個實例。 – Volker

+0

我也試過,但後來我無法設置窗口的出口。假設我正在使用NSWindowController將NSWindow allong的另一個子類加入進來。我如何設置窗口控制器的特定類? – Bobby

回答

2

所以我知道這個問題是舊的,但我要回答這個問題,因爲反正我這個掙扎着,有沒有大量的信息在那裏它。

您需要保持每個窗口的範圍,以防止垃圾收集。你可以用NSWindowControllers的集合來做到這一點。我把這個集合放在AppDelegate.swift中,這可能是錯誤的,但除了主窗口控制器之外,我都看不到其他任何地方,這也是錯誤的。

您可以像這樣把它聲明:

var exampleListOfWindows = [NSWindowController]() 

您需要以編程方式創建新窗口,然後將它們添加到您的收藏。

你可以做到這一點與這樣的功能:

func openNewWindow(someParameter: String) { 

    let storyboard = NSStoryboard(name: "Main",bundle: nil) 

    if let exampleViewController = storyboard.instantiateControllerWithIdentifier("exampleStoryboardId") as? ExampleViewController{ 

     let newWindow = NSWindow(contentViewController: exampleViewController) 

     // you'll probably need to pass your window some data and because I hate myself I choose to do it like this 
     exampleViewController.passSomeDataToNewWindowFunction(someParameter) 

     newWindow.makeKeyAndOrderFront(self) 

     let controller = NSWindowController(window: newWindow) 
     exampleListOfWindows.append(controller) 
     controller.showWindow(self) 

    } 
} 
+0

換句話說,要停止NSWindow實例被ARC立即釋放,您將窗口實例存儲在可變數組中?然後當你打開/關閉一個窗口時,你可以從數組中添加/刪除一個窗口實例。這允許您在打開新窗口時不覆蓋當前窗口實例。我對麼? – Supertecnoboff