我正在构建一个聊天应用程序,我有一个NSWindow
的出口。现在我想打开窗口的多个实例。我该怎么做?我没有使用窗口控制器。 makeKeyAndOrderFront
:方法只会打开一个实例。
请帮助我,我无法在任何地方找到它
答案 0 :(得分:3)
所以我知道这个问题已经过时了,但无论如何我都会回答这个问题,因为我在努力解决这个问题并且没有太多关于它的信息。
您需要将每个窗口保持在范围内,以便不会收集垃圾。您可以使用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)
}
}