代码之家  ›  专栏  ›  技术社区  ›  Lytol

有没有办法给Cocoa中的菜单项分配多个等价键(通过IB或编程)?

  •  7
  • Lytol  · 技术社区  · 15 年前

    Cmd+N Cmd+T 因为它将在选项卡中打开一个新文档。*如何在界面生成器中或以编程方式执行此操作?

    2 回复  |  直到 15 年前
        1
  •  4
  •   Peter Hosey    15 年前

    制作第二个(最简单的方法是复制它)并将其设置为隐藏。当用户打开菜单时,它不会显示出来,但是只要它被启用,它的等价键应该仍然有效。

        2
  •  1
  •   Atika    9 年前

    enter image description here

    一个简单的方法 两个或多个密钥等价物 因为一个动作是复制 NSMenuItem 标签 “替代方案” 菜单项。

    AppDelegate 代表( NSMenuDelegate NSMenu (其中内部项需要更新可见性)。

    隐藏菜单项 (或具有隐藏上级项的项)不出现在 不参与命令键匹配 .

    打开,隐藏这个候补 ,当它关闭时,显示它们。

    Swift 3中的示例:

    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)
            }
        }
    }