我正在尝试在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
所以我实际得到的是一个平坦的item1
和item11
菜单列表。
任何提示?
我向Apple提交了一个错误(#18810635),得到的答复是它(#18531883)的副本仍然是开放的。
在OpenRadar http://openradar.appspot.com/radar?id=5772557445758976上发布了文件副本,并发送给开发者倡导者。
如果有人知道#18531883的命运 - 这是Finder Sync Extensions的核心存在理由?
答案 0 :(得分: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开始的级联。
答案 1 :(得分: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
}
答案 2 :(得分:0)
Finder Sync Extensions在macOS 10.11之前的版本中不支持子菜单。
在检查FIFinderSyncProtocol
标头时,代码文档中对此进行了说明:
使用特定的菜单项属性:标题,操作,图像和启用的。 从10.11开始:标记,状态和缩进级别也可以使用,并且允许子菜单。
optional func menu(for menu: FIMenuKind) -> NSMenu?