具体来说,我希望我的“新”菜单项能够响应Cmd+N
和Cmd+T
,因为它会在选项卡中打开一个新文档。*如何在Interface Builder中执行此操作编程?
*如果需要,我可以进一步解释推理,但我希望避免讨论优点,而是专注于如何做,而不是为什么要这样做。
答案 0 :(得分:4)
制作第二个(最简单的方法是复制它)并将其设置为隐藏。当用户拉开菜单时它不会显示,但只要启用它,它的等效键应该仍然有效。
答案 1 :(得分:1)
为某个操作设置两个或更多关键等价项的简单方法是复制NSMenuItem
并为这些&添加一个特殊的标记 #34;替代品" 菜单项。
然后设置AppDelegate
相应封闭NSMenuDelegate
的委托(NSMenu
)(内部项目需要更新可见性的位置)。
隐藏的菜单项(或具有隐藏的超级项目的项目)不会出现 菜单和不参与命令键匹配。
当NSMenu
打开时,隐藏此选项会替换NSMenuItem
,当它关闭时,会显示它们。
class AppDelegate: NSObject, NSApplicationDelegate, NSMenuDelegate {
func applicationDidFinishLaunching(_ aNotification: Notification) {
NSApp.mainMenu?.item(withTitle: "View")?.submenu?.item(withTitle: "Zoom")?.submenu?.delegate = self
}
func toggleVisibility(_ visible: Bool, ofAlternatesKeyEquivalentsItems items: [NSMenuItem]) {
for item in items.filter({ $0.tag == 2 }) {
item.isHidden = !visible
}
}
func menuWillOpen(_ menu: NSMenu) {
if menu.title == "Zoom" {
toggleVisibility(false, ofAlternatesKeyEquivalentsItems: menu.items)
}
}
func menuDidClose(_ menu: NSMenu) {
if menu.title == "Zoom" {
toggleVisibility(true, ofAlternatesKeyEquivalentsItems: menu.items)
}
}
}