「右クリックメニュー」を「コンテキストメニュー」と言う習慣がないゆとりなので、右クリックした時にメニューを出す方法を調べたいだけなのにちょっと苦労しました。(わかれば超簡単です。)
サンプル
右クリック時に以下のようなメニューを表示するサンプルを作りました。
やり方
NSViewのfunc menuForEvent(_ event: NSEvent) -> NSMenu?
をオーバーライドすれば右クリック時にこのメソッドが呼ばれます。
この関数の戻り値でMenuの内容を返してあげればOKです。
MyView.swift
import Cocoa
class MyView: NSView {
override func drawRect(dirtyRect: NSRect) {
super.drawRect(dirtyRect)
}
override func menuForEvent(event: NSEvent) -> NSMenu? {
// メニューの項目を作る
let menu = NSMenu(title: "hoge menu")
menu.addItemWithTitle("hoge", action: "hogeSelected:", keyEquivalent: "A")
menu.addItemWithTitle("piyo", action: "piyoSelected:", keyEquivalent: "5")
menu.addItemWithTitle("huga", action: "hugaSelected:", keyEquivalent: "Z")
return menu
}
func hogeSelected(sender: AnyObject) {
NSLog("hoge")
}
func piyoSelected(sender: AnyObject) {
NSLog("piyo")
}
func hugaSelected(sender: AnyObject) {
NSLog("huga")
}
}
余談ですが、NSMenu.addItemWithTitle
の引数の内容は以下の通り
- 第1引数 → 表示されるタイトル
- 第2引数 → 選択時に飛ぶメソッドのセレクタ(これが空だとMenuItemがDisableになる)
- 第3引数 → ショートカットキー(上記サンプルのA,Zのショートカットは他で使われているので自動的にshiftも付加されていると思われる)