問題タブ [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.

0 投票する
1 に答える
1530 参照

cocoa - 関連するコントローラーでの NSToolbarItem の検証

ビューとして NSButton を持つ NSToolbarItem と、メイン メニューに NSMenuItem があります。どちらも同じアクションを持ち、特定のターゲットではなく、ファーストレスポンダに送信されます。そのメソッドは、最終的に、ウィンドウのコンテンツ ビューのビュー階層のどこかにある NSSplitViewController のサブクラスに実装されます。両方の項目を検証したいのですが、特定の分割ビュー コントローラーに検証を任せます。これは、そのコントローラーに固有のいくつかの条件に依存しているためです。

私はオーバーライドvalidateToolbarItem(_:)validateMenuItem(_:)、その分割ビューコントローラーで。メニュー項目については、これは期待どおりに機能しています。メソッドが呼び出され、検証が行われます。validateToolbarItem(_:)ただし、呼び出されることはありません。

Apple のドキュメントによると、NSToolbar はvalidateToolbarItem(_:)ビューベースのツールバー項目に送信しません。これをテストするために、ツールバー項目を画像ツールバー項目に置き換えたところ、期待どおりに動作しました。

これに基づいて、いくつかの解決策に出くわしましたが、それらは私が望むものではありません。

  • NSToolbarItem をサブクラス化し、オーバーライドしますvalidate()。ただし、コントローラーvalidateToolbarItem(_:)を呼び出す方法についてのガイダンスはありません。

  • NSToolbar と overridevalidateVisibleToolbarItems()をサブクラス化し、最初の応答者にメッセージを送信します。ここで、ツールバーのレスポンダーチェーンの外側にあるため、スプリットビューコントローラーにメッセージを送信できないという問題に直面しています。

  • 上記のように NSToolbar をサブクラス化しますがvalidateToolbarItem(_:)、NSWindowController などのレスポンダー チェーン内にあるコントローラーに実装します。これは機能しますが、メニュー項目に不要なものを処理するために追加のコードを追加する必要があります。

画像ツールバー項目とメニュー項目の場合と同様に機能する、これに対するエレガントなソリューションはありますか?

0 投票する
1 に答える
89 参照

cocoa - macOS : NSButton のチェックマークが NSToolbar 内に表示されない

Mac アプリケーションの NSToolbar のメンバーとして NSToolbarItem 内に NSButton があります。次のようなもの:

ここに画像の説明を入力

この 2 つのチェックマークはオンになっていますが、表示されません。

これらのいずれかをクリックすると、切り替えられます (コードが実行されます) が、チェックマークは表示されません。

これらは以前のバージョンの macOS では機能していましたが、mojave では機能しなくなりました。とにかく、このコードを 10.12 にコンパイルしています。

ストーリーボードの構造は次のとおりです。

ここに画像の説明を入力

何か案は?