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

Author:

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が呼べない。
とまあ非常にややっこしいのです。

Share on Facebook
Pocket