問題タブ [nstoolbaritem]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
cocoa - 関連するコントローラーでの NSToolbarItem の検証
ビューとして NSButton を持つ NSToolbarItem と、メイン メニューに NSMenuItem があります。どちらも同じアクションを持ち、特定のターゲットではなく、ファーストレスポンダに送信されます。そのメソッドは、最終的に、ウィンドウのコンテンツ ビューのビュー階層のどこかにある NSSplitViewController のサブクラスに実装されます。両方の項目を検証したいのですが、特定の分割ビュー コントローラーに検証を任せます。これは、そのコントローラーに固有のいくつかの条件に依存しているためです。
私はオーバーライドvalidateToolbarItem(_:)
しvalidateMenuItem(_:)
、その分割ビューコントローラーで。メニュー項目については、これは期待どおりに機能しています。メソッドが呼び出され、検証が行われます。validateToolbarItem(_:)
ただし、呼び出されることはありません。
Apple のドキュメントによると、NSToolbar はvalidateToolbarItem(_:)
ビューベースのツールバー項目に送信しません。これをテストするために、ツールバー項目を画像ツールバー項目に置き換えたところ、期待どおりに動作しました。
これに基づいて、いくつかの解決策に出くわしましたが、それらは私が望むものではありません。
NSToolbarItem をサブクラス化し、オーバーライドします
validate()
。ただし、コントローラーvalidateToolbarItem(_:)
を呼び出す方法についてのガイダンスはありません。NSToolbar と override
validateVisibleToolbarItems()
をサブクラス化し、最初の応答者にメッセージを送信します。ここで、ツールバーのレスポンダーチェーンの外側にあるため、スプリットビューコントローラーにメッセージを送信できないという問題に直面しています。上記のように NSToolbar をサブクラス化しますが
validateToolbarItem(_:)
、NSWindowController などのレスポンダー チェーン内にあるコントローラーに実装します。これは機能しますが、メニュー項目に不要なものを処理するために追加のコードを追加する必要があります。
画像ツールバー項目とメニュー項目の場合と同様に機能する、これに対するエレガントなソリューションはありますか?