10
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Swiftで右クリックメニュー(context menu)を出す

Last updated at Posted at 2016-01-16

「右クリックメニュー」を「コンテキストメニュー」と言う習慣がないゆとりなので、右クリックした時にメニューを出す方法を調べたいだけなのにちょっと苦労しました。(わかれば超簡単です。)

サンプル

右クリック時に以下のようなメニューを表示するサンプルを作りました。

スクリーンショット 2016-01-16 16.59.25.png

やり方

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も付加されていると思われる)
10
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?