26

我正在尝试为 Swift/Cocoa 中的 Finder Sync 扩展创建级联子菜单。我有以下代码:

override func menuForMenuKind(menuKind: FIMenuKind) -> NSMenu! {
    let m = NSMenu(title: "")
    let mi1 = NSMenuItem(title: "item1", action: nil, keyEquivalent: "")
    let mi11 = NSMenuItem(title: "item11", action: nil, keyEquivalent: "")

    let m2 = NSMenu(title: "")
    let mi2 = NSMenuItem(title: "item2", action: nil, keyEquivalent: "")
    m2.addItem(mi2)

    m.addItem(mi1)
    m.addItem(mi11)
    m.setSubmenu(m2, forItem: mi1)
    return m
}

所以我想要实现的是:

item1->
       item2 
item11

所以我实际上得到的是一个平面item1item11菜单列表。

有什么提示吗?


我向 Apple (#18810635) 提交了一个错误,得到的回复是它是 (#18531883) 的副本,它仍然是开放的。

在 OpenRadar http://openradar.appspot.com/radar?id=5772557445758976上发布了该文件的副本,并在推特上发给了一位开发人员倡导者。

如果有人知道 #18531883 的命运 - 这是 Finder Sync Extensions 的核心存在理由吗?

4

3 回答 3

4

我已经将项目升级到 Swift 2.0,最后制作了一个工作子菜单。发布解决方案:

override func menuForMenuKind(menuKind: FIMenuKind) -> NSMenu! {
    let main = NSMenu()
    let submenu = NSMenu()
    let mainDropdown = NSMenuItem(title: "Some option group", action: nil, keyEquivalent: "")
    main.addItem(mainDropdown)
    m.setSubmenu(submenu, forItem: mainDropdown)


    submenu.addItem(NSMenuItem(title: "Option 1", action: nil, keyEquivalent: ""))
    submenu.addItem(NSMenuItem(title: "Option 2", action: nil, keyEquivalent: ""))
    return main
}

这仅适用于 Mac OS 10.11+,10.10.5 仍然存在无法生成子菜单的错误。因此,一个好的方法是为 < 10.11 生成一个平面菜单,并从 el capitan 开始生成一个级联。

于 2015-09-21T06:45:43.383 回答
0
func constructMenu() {
        let main = NSMenu()
        let submenu = NSMenu()
        let mainDropdown = NSMenuItem(title: "Some option group", action: nil, keyEquivalent: "")
        main.addItem(mainDropdown)
        main.setSubmenu(submenu, for: mainDropdown)


        submenu.addItem(NSMenuItem(title: "Option 1", action: nil, keyEquivalent: ""))
        submenu.addItem(NSMenuItem(title: "Option 2", action: nil, keyEquivalent: ""))




       // myList.setSubmenu(mylist2, for: myList)


        statusItem.menu = main
    }
于 2019-03-28T16:56:17.733 回答
0

Finder 同步扩展在 macOS 10.11 之前的版本中不支持子菜单。

当您检查FIFinderSyncProtocol标头时,代码文档中会说明这一点:

使用特定的菜单项属性:标题、操作、图像和启用。从 10.11 开始:tag、state 和 indentationLevel 也可以使用,并且允许子菜单

optional func menu(for menu: FIMenuKind) -> NSMenu?
于 2020-04-15T21:24:25.617 回答