没有Window系统菜单时,Command-M是否应工作以最小化?

时间:2018-08-01 23:58:44

标签: macos keyboard-shortcuts

在我的应用程序中,我只是注意到当我在键盘上按Command-M时,什么也没发生(即,尽管单击“最小化”按钮仍然可以正常工作,但窗口并未最小化到任务栏)。在MacOS的其他应用程序中,当我按Command-M时,Window系统菜单(包含“最小化”菜单命令)会立即突出显示,然后窗口最小化到任务栏。

我的应用程序的主窗口没有Window菜单(根据我的客户的要求)-这就是为什么Command-M无法正常工作吗?如果是这样,此行为是否记录在任何地方?

2 个答案:

答案 0 :(得分:0)

  

我的应用程序的主窗口没有Window菜单(根据我的客户的要求)-这就是Command-M无法正常工作的原因吗?

正确。 ⌘M键盘快捷键没有什么神奇之处–它与其他菜单快捷键一样工作。如果菜单栏中没有带有该快捷方式的菜单项,则按下该菜单项将不会发生任何事情。

(顺便说一句,同样的原理也适用于“编辑”菜单。如果删除“编辑”菜单,则会使用标准键盘快捷键,如⌘Z⌘X⌘ C ⌘V⌘A无效。)

我强烈建议您建议客户重新考虑从其应用程序中删除标准UI元素。但是,如果他们不听,则可以将菜单项添加到另一个菜单,例如应用程序菜单。

答案 1 :(得分:0)

因为您的应用程序不包含Window菜单,所以没有与- M 关联的菜单项(通常,它与{{ 1}}> Window项)。键盘快捷键只是映射为该菜单项操作的快捷键;删除该项目,其相应的快捷方式也会被删除。

如果要允许- M 最小化窗口,而无需执行Minimize菜单操作或Minimize菜单,则可以设置在调用窗口的Window方法的代码中建立一个手动侦听器,该方法模拟用户手动最小化窗口(就像performMiniaturize(_:)菜单项一样)。请注意,此方法比Minimize更可取,miniaturize(_:)不会像- M 快捷方式的约定那样立即突出显示黄色的“交通灯”按钮。代码可能看起来像这样:

class ViewController: NSViewController {
    var keyMonitor: Any?
    ...
    override func viewDidLoad() {
        self.keyMonitor = NSEvent.addLocalMonitorForEvents(matching: .keyUp) { event -> NSEvent? in
            if (event.modifierFlags.contains(.command)) {
                if (event.keyCode == 46) { // 46 is the key code for "m"
                    self.view.window?.performMiniaturize(nil)
                    return nil
                }
            }
            return event
        }
        ...
    }
...
}