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 に答える