无法为NSMenuItem(FinderSync扩展)设置子菜单

问题描述 投票:25回答:2

我正在尝试在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的核心存在理由?

macos cocoa swift xcode6 xcode6gm
2个回答
3
投票

我已将项目升级到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仍有错误无法生成子菜单。所以一个好的appraoch正在生成<10.11的平面菜单,以及从el capitan开始的级联。


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
    }
© www.soinside.com 2019 - 2024. All rights reserved.