使用菜单栏在OS X app中创建一个新窗口

时间:2017-11-01 21:16:51

标签: swift macos

我制作了一个非常简单的带有两个窗口的mac应用程序。我是一名iOS开发人员,因此我对swift非常熟悉,但在构建OS X应用程序时,iOS应用程序中的一些UI元素无法很好地转换。我想利用屏幕顶部的菜单栏。我想在默认情况下单击文件下的“新建”并打开我初始VC的新窗口。我怎么做?

我已经阅读了很多帖子,他们告诉我要建立一个新的菜单栏,但我觉得应该有一个更简单的方法,默认情况下菜单栏。即使我设法创建插座或为新按钮添加操作,我该如何调用特定的VC?我可以像在iOS中一样实例化VC吗?我只想要最简单的方法来做到这一点。

这是我用来呈现新窗口的内容:

let storyboard = NSStoryboard(name: NSStoryboard.Name(rawValue: "Main"), bundle: nil)
let myWindowController = storyboard.instantiateController(withIdentifier: NSStoryboard.SceneIdentifier(rawValue: "LoginVC")) as! LoginViewController

if let window = NSApplication.shared.mainWindow 
    window.contentViewController = myWindowController //as! NSWindowController  // just swap
}

1 个答案:

答案 0 :(得分:0)

默认情况下,"新"菜单项会将newDocument(_:)消息发送给"第一响应者"。如果responder chain上的任何对象实现它,则将启用菜单项,否则禁用菜单项。

要回复此消息,您可以:

  • 在响应者链中的某个地方实现func newDocument(_ sender: Any?)(可能在某个地方朝向它的末尾,就像在app代理中一样)。在document-based application中,NSDocumentController已经处理了此问题。
  • 为" New"设置自己的行动和目标菜单项,用于调用特定对象上的另一个方法,以使其创建并显示新窗口。这将适用于基于用户在应用程序中的位置的上下文操作(例如复制或粘贴)。