在我的应用程序中,我只是注意到当我在键盘上按Command-M时,什么也没发生(即,尽管单击“最小化”按钮仍然可以正常工作,但窗口并未最小化到任务栏)。在MacOS的其他应用程序中,当我按Command-M时,Window
系统菜单(包含“最小化”菜单命令)会立即突出显示,然后窗口最小化到任务栏。
我的应用程序的主窗口没有Window
菜单(根据我的客户的要求)-这就是为什么Command-M无法正常工作吗?如果是这样,此行为是否记录在任何地方?
答案 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
}
...
}
...
}