swift3+OSX開発格闘記第18回「右クリック・・・」

Macであろうとも右クリック、コンテキストメニューは実装できます。
これ自体はNSMenuを作ってaddMenuをすればいい。
けど、Visual Studioと違うのはこのインスタンスをオブジェクトにくくりつけるのではなく、オーバーライド関数として用意するところ。
こんな感じですね。





override func menu(for event: NSEvent) -> NSMenu? {
// メニューの項目を作る
let menu = NSMenu(title: "menu")
menu.addItem(withTitle: "新規作成", action: #selector(self.newItemSelected), keyEquivalent: "N")
menu.addItem(withTitle: "編集", action: #selector(self.updateSelected), keyEquivalent: "U")
menu.addItem(withTitle: "削除", action: #selector(self.deleteSelected), keyEquivalent: "D")

return menu
}


で、これ実装する場所がNSViewなんでハンドラーからViewcontrollerを呼ぼうとするとめんどい。
親のインスタンスを持たないのがXCodeの原則なので。
ってことで、window?.contentViewController?という形で呼ぶしか無い。
しかしこれってアクティブじゃないViewControllerが呼べない。
とまあ非常にややっこしいのです。

Author Info(オガティ

エンジニアとして勤め、インフラ周りの開発を経た後Web業界へ異動。
プライベートでもブログ「ogatism」の運営や電子書籍の執筆、占星術師としての活動など幅広い分野で活動中。
詳細はこちら

占い鑑定レポート作成サービス受付中

◆ ogatismをFeedlyに登録 ◆
follow us in feedly