2015-06-12 39 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