我正在構建一個聊天應用程序,爲此我有一個NSWindow
的插座。現在我想打開窗口的多個實例。我該怎麼做?我沒有使用窗口控制器。 makeKeyAndOrderFront
:方法只打開一個實例。打開NSWindow的多個實例
請幫助我,我找不到它的任何地方
我正在構建一個聊天應用程序,爲此我有一個NSWindow
的插座。現在我想打開窗口的多個實例。我該怎麼做?我沒有使用窗口控制器。 makeKeyAndOrderFront
:方法只打開一個實例。打開NSWindow的多個實例
請幫助我,我找不到它的任何地方
所以我知道這個問題是舊的,但我要回答這個問題,因爲反正我這個掙扎着,有沒有大量的信息在那裏它。
您需要保持每個窗口的範圍,以防止垃圾收集。你可以用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)
}
}
換句話說,要停止NSWindow實例被ARC立即釋放,您將窗口實例存儲在可變數組中?然後當你打開/關閉一個窗口時,你可以從數組中添加/刪除一個窗口實例。這允許您在打開新窗口時不覆蓋當前窗口實例。我對麼? – Supertecnoboff
請大家幫忙,而不是改變fomatting – Bobby
使用NSWindowController最好的解決和實例每個窗口之一。然後每個實例加載窗口的NIB並打開它。您不能在NIB中創建同一個窗口的第二個實例。 – Volker
我也試過,但後來我無法設置窗口的出口。假設我正在使用NSWindowController將NSWindow allong的另一個子類加入進來。我如何設置窗口控制器的特定類? – Bobby