macos - 如何在非基于文档的应用程序中使用 "command + n"创建多个窗口

标签 macos cocoa

有没有办法在非基于文档的应用程序中使用“command + n”创建/启用多个窗口?我想使用 command + n 拥有该窗口的无限实例(实际上不是无限的,但可能是 6-7 个实例)

或者我必须创建一个基于文档的应用程序并将所有代码移植到新项目模板中是唯一的解决方案?

我可以看到“新建”菜单按钮现在已被禁用。

最佳答案

有几种方法可以做到这一点。 首先将 New 菜单项连接到 IBAction 方法。 为该方法命名任何对您有意义的名称。

接下来,您将需要向 Controller 添加某种属性(为了简单起见,应用程序委托(delegate)),该属性基本上是一个窗口堆栈,仅存储对每个窗口或窗口 Controller 的引用。 NSMutableArray 应该做得很好。

现在您可以通过几种方式完成下一部分,但我建议使用 nib/xib 创建一个 NSWindowController 子类(特别是如果这些窗口中具有相同的基本内容)。 在 nib 文件中执行您想要的操作。

现在,在 IBAction 方法中,创建窗口 Controller 类的新实例,将其添加到可变数组中。告诉它加载它的窗口。

您只需决定是否应将 Controller 从堆栈中删除,并在其窗口关闭时将其设置为 nil。 有很多方法可以解决这个问题,具体取决于您的设计来确定什么是正确的。

关于macos - 如何在非基于文档的应用程序中使用 "command + n"创建多个窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19657655/

相关文章:

Git克隆错误: 'fatal: multiple updates for ... ref not allowed'

python - 计算文件中所有可能的长度为 n 的子字符串? (不包括空格)

macos - NSAnimation 删除按钮背景颜色

macos - 是否可以使用 Preview.app 在特定页面打开 PDF?

cocoa - 在XCode中,当您在IB中而不是在代码中创建类的实例时,实例对象的名称是什么?

macos - 在家搭建 Hadoop 集群(2PC)

objective-c 类的默认初始化方法?

MySQL-python 1.2.3 和 OS X 10.5 : 64- or 32-bit?

iPhone ios 5,在每个模拟器运行时重新创建数据库?

swift - 无法在 while 循环内写入数组 - 下标仅获取