質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
TableView

TableView(UITableView)とは、リスト形式で表示するコントロールで、ほとんどのアプリに使用されています。画面を「行」に分けて管理し、一般的には各行をタップした際に詳細画面に移動します。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

622閲覧

【Swift】macOSのTableViewでコンテクストメニューを実装するには

freemann

総合スコア264

TableView

TableView(UITableView)とは、リスト形式で表示するコントロールで、ほとんどのアプリに使用されています。画面を「行」に分けて管理し、一般的には各行をタップした際に詳細画面に移動します。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2020/04/12 12:55

編集2020/04/13 10:57

macOSのアプリでコンテクストメニューを実装するにはNSViewでmenu(for:)を使うらしいですが、これをTableView上で右クリックしたときだけにしたいです。
マウスのポインタの位置で判断するしかないでしょうか。

アドバイスを受けて以下のようにコードを追加しましたが、コンテクストメニューが出ません。
右クリックしても何の反応もなし。
実装方法が悪いのでしょうか。

Swift

1extension NSTableView { 2 override open func menu(for event: NSEvent) -> NSMenu? { 3 var menu = NSMenu(title: "Context Menu") 4 let myApp = NSApplication.shared.delegate as! AppDelegate 5 6 menu.addItem(withTitle: "", action: #selector(myApp.mainView!.addRow(_:)), keyEquivalent: "") 7 8 menu.addItem(withTitle: "", action: #selector(myApp.mainView!.insertNewRow), keyEquivalent: "") 9 10 menu.addItem(withTitle: "", action: #selector(myApp.mainView!.copyRow), keyEquivalent: "") 11 menu.addItem(withTitle: "", action: #selector(myApp.mainView!.pasteRow), keyEquivalent: "") 12 menu.addItem(withTitle: "", action: #selector(myApp.mainView!.insertCopiedRow), keyEquivalent: "") 13 14 return menu 15 16 } 17} 18

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MasakiHori

2020/04/13 06:34

NSTableViewもNSViewですので同じように実装できます
freemann

2020/04/13 06:47

情報ありがとうございます。 試してみます。
guest

回答1

0

自己解決

該当するTableViewのクラスを下記のMyTableViewに変更して、そこでmenu(for:)を上書きするとうまくいきました。
アドバイスありがとうございました。

Swift

1class MyTableView: NSTableView { 2 3 override func draw(_ dirtyRect: NSRect) { 4 super.draw(dirtyRect) 5 6 // Drawing code here. 7 } 8 9 override func menu(for event: NSEvent) -> NSMenu? { 10 let menu = NSMenu(title: "Context Menu") 11 12 menu.addItem(withTitle: "A", action: #selector(A), keyEquivalent: "") 13 14 menu.addItem(withTitle: "B", action: #selector(B), keyEquivalent: "") 15 16 return menu 17 18 19 } 20}

投稿2020/04/14 04:10

freemann

総合スコア264

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問