首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法为NSMenuItem设置子菜单(FinderSync扩展)

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

Stack Overflow用户
提问于 2014-10-14 11:54:25
回答 3查看 3.1K关注 0票数 26

我试图在Swift/Cocoa中为Finder扩展创建一个级联子菜单。我有以下代码:

代码语言:javascript
复制
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
}

所以我想要实现的是:

代码语言:javascript
复制
item1->
       item2 
item11

所以我真正得到的是一个平面的item1item11菜单列表。

有什么暗示吗?

我向苹果(#18810635)提交了一个bug,得到的回复是它是(#18531883)的复制(#18531883),它仍然处于打开状态。

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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-09-21 06:45:43

我将该项目升级到SWIFT2.0,并最终制作了一个工作子菜单。张贴解决方案:

代码语言:javascript
复制
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 10.11+上工作,10.10.5仍然存在无法生成子菜单的错误。因此,一个好的appraoch正在为< 10.11生成一个平面菜单,以及从el capitan开始的级联。

票数 4
EN

Stack Overflow用户

发布于 2019-03-28 16:56:17

代码语言:javascript
复制
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
    }
票数 0
EN

Stack Overflow用户

发布于 2020-04-15 21:24:25

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

在检查FIFinderSyncProtocol头时,代码文档中说明了这一点:

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

代码语言:javascript
复制
optional func menu(for menu: FIMenuKind) -> NSMenu?
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26360209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档