我正在构建一个聊天应用程序,为此我有一个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