#author("2018-04-27T17:20:30+09:00","default:wikiwriter","wikiwriter") &tag(Cocoa/メニュー); *目次 [#l0619296] #contents *関連ページ [#bc7f7852] *参考情報 [#r2156c71] *概要 [#h99f1e7a] -Cocoaアプリケーションのメニューは、ストーリーボードを使用している場合Main.storyboardのMain Menuで定義されている。 -対応するイベントハンドラはそれぞれのメニュー項目を右クリックすると表示される。 -例えば「File > Open」の場合First ResponderのopenDocumentに接続されていることがわかる。 -document baseのアプリの場合、openDocumentはフレームワーク側に組み込まれていて直接処理される。 -document baseでない場合、例えばAppDelegateに以下のようなメソッドを追加されると呼び出され、メニューも有効となる。 #pre{{ @IBAction func openDocument(_ sender: Any) { print("test") } }} -First Responderに設定されたアクションはnilターゲットアクションで、レスポンダーチェインを辿って送信されるため。document baseの場合も同様になる。 *First ResponderアクションをInterface Builderで設定するには。 [#ead4558e] -たとえばAppDelegateにメソッドを追加。 #pre{{ @IBAction func test(_ sender: Any) { print("test") } }} -IBでFirst ResponderのAttributes Inspectorを開く。 -そこに「User Defined」としてtestを追加し、人にのメニュー項目をFirst Responderにctrlドラッグすれば良い。 -AppDelegateにドロップすると直接バインドされてしまうので、このためにUser Definedがあるのだと思われる(もっといえばFirst Responderという項目がIB上に存在するのもそのためだと思われる)。