3

ドキュメントベースのアプリケーションがあります。ユーザーが NSTextView で選択したテキストを右クリックしたときに、状況依存の情報を表示するコンテキスト メニューを追加したいと考えています。

私はAppleのドキュメントのアドバイスに従いました。

  • XIB ファイルにルート オブジェクトとして NSMenu を追加しました。
  • NSMenu インスタンスをmenuNSTextView のアウトレットに接続しました。
  • NSMenu 内の NSMenuItem に IBAction を接続しました。

ここまでは順調ですね。すべてが期待どおりに機能します。メニュー項目が表示され、選択するとアクションが呼び出されます。

メニュー項目を適切に構成できるように、メニューが表示される前に、選択したテキストを NSTextView から取得する必要があります。ドキュメントによると

コンテキスト メニューをカスタマイズする必要がある場合は、適切なオブジェクトをメニューのデリゲートとして設定し、menuWillOpen: メソッドを実装して、表示される直前に適切と思われるようにメニューをカスタマイズします。

NSMenu のデリゲートをファイルの所有者に接続します。デリゲート メソッドは呼び出されません。(menuWillOpen:私が必要とする唯一のものですが、他のものも試しました)。

メニュー項目が選択されたときに呼び出される IBAction 内にブレークポイントを設定します。デバッガーでメニューを調べると、デリゲート メソッドを実装するオブジェクトにデリゲートが正しく設定されていることがわかります。

他に確認することはありますか?私が露骨に間違っていることはありますか?

Xcode v4.6.3
SDK v10.8
展開ターゲット 10.7

4

2 に答える 2

0

このスレッドを見つけることで、多くの時間を節約できました...ありがとう! NSViewSwiftで動作する実装を次に示します。myNSMenuは Storyboard から へのアウトレットでappDelegateあり、 のサブクラスですNSMenu。以下のコードでデリゲートを割り当てないと、NSMenuDelegate関数は呼び出されませんでした。

    let appDelegate = NSApplication.sharedApplication().delegate as! AppDelegate
    appDelegate.myNSMenu.delegate = appDelegate.myNSMenu
    NSMenu.popUpContextMenu(appDelegate.myNSMenu, withEvent: theEvent, forView: self)        
于 2016-04-28T15:59:57.887 に答える