問題タブ [nsmenuitem]
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.
objective-c - 開くたびにNSMenu構造を変更しますか?
NSMenu階層が表示されるたびに動的に変更できるようにする必要があります(アイテムの追加/削除など)。例えば:
- ユーザーはメインメニューで追跡セッションを開始し、サブメニューを選択します
- サブメニューを検出して、コードを開いて実行し、変更しようとしています
- 追跡を続け、ユーザーは同じサブメニューを再度追跡します:goto 2
したがって、これを行うために、NSMenuDelegateプロトコルを実装するオブジェクトがあります。メソッドmenuNeedsUpdateは、最初は機能しますが(2)、サブメニューを開いた2回目は機能しません。(追跡セッションごとに1回だけ呼び出されます)
メソッドmenuWillOpenは毎回呼び出されますが、ドキュメントにはこのアプローチを使用すると失格と思われる次の警告があります。
この方法では、メニューまたはメニュー項目の構造を変更しないでください。
これを達成する方法はありますか?
objective-c - プログラムでNSStatusBar.systemStatusBarのNSMenuを作成します
コードのみを使用して、システムステータスバーに簡単なメニューを作成しようとしています。コンパイルエラーやランタイムエラーは発生していませんが、まったく影響がありません。
cocoa - NSMenuItemをNSArrayControllerにバインドするにはどうすればよいですか
NSMenuItemの有効状態をNSArrayControllerの選択にバインドするにはどうすればよいですか?アイテムの有効状態をコントローラーのselectedObjectsまたはselectedIndexesにバインドしようとしましたが、どちらの場合も、選択がある場合にmenuitemが有効になることはありません。IBで、「有効にする」チェックボックスをオフにしました。テーブルに選択がある場合にNSMenuItemを有効にしたいだけです。私のテーブルでは複数選択が可能で、selectedObjects。@ countにバインドされたボタンも使用しており、ボタンは期待どおりに有効/無効になっているため、同じキーパスを使用してもメニュー項目で機能すると思いましたが、違います。グーグルで答えが見つからないので難しいことではないので、簡単だと思います。ありがとう
cocoa - メニューレットをこのように表示するにはどうすればよいですか
メニューレット アプリケーションでこの効果を得るにはどうすればよいですか。ウィンドウ効果だけが欲しいだけです。
私の現在のアプリは次のようになります。誰かが光を当てることができれば幸いです。ありがとう。
objective-c - バインドされた NSPopupButton に「未選択」オプションを追加する
NSArrayController に裏打ちされたコア データにバインドされた NSPopupButton があります。NSPopupButton の選択も、コア データに裏打ちされた項目にバインドされます。バインディングはほとんど次のとおりです。
selectedObject には、オブジェクトを検索してそのオブジェクトを返す ID をルックアップするメソッドがあります。
オブジェクトを別の方法で設定するのは、次のように簡単です。
ほとんどの場合、オブジェクトは利用可能な contentValues リスト内のオブジェクトと一致します。ただし、選択したオブジェクトの ID が 0 の場合があります。その場合、「未選択」というオプションを使用可能なリストに表示したいと考えています。オブジェクト ID が 0 の場合、別のオブジェクト (または何も返さない) を簡単に送り返すことができます。
これは「選択なしのプレースホルダー」で処理できますが、ユーザーが他のアイテムのいずれかを選択するとすぐに、選択されていないプレースホルダーがリストから削除されます。
ユーザーがアイテムを選択できるようにしたい、またはアイテムを選択しないことを選択できるようにしたい (つまり、「未選択」に戻す)。選択が変更されるたびにコアデータから取得した配列をウォークすることによってプログラムで NSPopupMenu 全体を作成する以外に、ユーザーが常に利用できる選択されていない状態を表すメニュー項目をリストに挿入する方法はありますか?
「選択されていません」という名前を除いて、すべて 0 ベースの値を持つエンティティ オブジェクトをコア データ ストアに追加することを検討しました。ただし、これは物事を行う正しい方法のようには感じられず、実際には、実際にはデータとの関連性がない空のオブジェクトがストアにあるという別の問題が発生します。
いつものように、どんな助けも大歓迎です。
解決
まあ、私はHobbes the Tige
投稿されたものを正確にフォローしていませんでしたが、それは私が必要な場所に私を置いてくれました. IB にバインドする代わりに、選択の変更時にオブジェクトの配列を親配列または変更を開始するユーザー アクティビティに送信できるメソッドを作成することになりました。このメソッドは、NSPopupButton を適切なコア データ エンティティ情報で更新するだけで、一致するオブジェクトの selectedTag をバインドする IB を許可します。
これが方法です
name
明らかに、これは、説明フィールドuid
用の と一意の識別子用のを持つことに準拠して渡されるオブジェクトの配列に依存します。
ジョブ完了。:-)
objective-c - メニューの Cocoa Key Equivalent が機能しない
NSStatusItem を作成し、インターフェイス ビルダー (Xcode 4.0) 内で 2 つの主要な同等物を割り当てました。これらは、設定メニュー cmd- と終了オプション cmd-q 用です。これらはどちらも、メニューが強調表示されている/開いているときに機能しますが、それ以外の場合は、アプリケーションが最優先であっても機能しません。なぜこれが起こっているのか、またはどうすればこれを変更できるのかについてのアイデアはありますか?
objective-c - カスタム ビューでメニュー項目を非表示にするにはどうすればよいですか?
NSMenuItem で (メソッドを使用して) 非常に単純なカスタム ビュー (読み取り専用の NSTextField と NSSegmentedControl のみを含む) を使用してい-setView:
ます。この部分は期待どおりに機能します。
問題は次の-menuNeedsUpdate:
とおりです。NSMenu デリゲート メソッドで、条件付きでメニュー項目を非表示にしています。を呼び出す[item setHidden:YES]
と、カスタム ビューのメニュー項目は非表示になりませんが、他の「バニラ」メニュー項目は非表示になります。
私のカスタム ビューは独自の XIB に組み込まれており、カスタム NSViewController を介してアクセスしています。
アップデート
Interface Builder で [非表示] チェックボックスをオンにしても、メニュー項目は表示されたままになり、コードで非表示になっている行を削除します。
更新 2
メニュー項目hidden
に設定する前後に、カスタムビューにも設定してみました。hidden
結果は、メニュー項目が非表示になっていないかのようですが、ビューは非表示になっています。ビューのコントロールは表示されませんが、表示されるはずの場所にまだギャップがあります。
アップデート 3
Apple のMenuItemViewサンプル コードを変更して、追加後にメニュー項目の 1 つを非表示にしました ( [menuItem setHidden:YES];
87 行目に挿入)。私のコードと同じ効果があります (つまり、なし)。
このメニュー項目を非表示にする唯一の方法は、非表示にする必要があるときにビューを設定し、表示する必要があるときに元に戻すことだと思い始めていますがnil
、それは必要ではないようです.
更新 4
以下のマイクの答えを使用して、私が使用しているコードは次のとおりです。
objective-c - Interface BuilderからNSMenuItemsを接続する最良の方法は?
そのため、CocoaDevをチェックし、NSMenuItemsのCocoaドキュメントを読み、InterfaceBuilderでいくつかのテストを行うことに時間を費やしました。
私のアプリケーションには、Interface Builderで設計されたアプリケーションメニュー([NSApp mainMenu])があります。私は3つの潜在的な道を見る:
アクションレスポンダーをNSApplicationDelegateに配置します。これは私には奇妙に思えます。これは、食物連鎖のはるか上にあることもあり、ボルトで固定されているように見えることもあります。
さまざまなNSMenuItemアクションメッセージをリッスンするサブビューを作成します。これは便利に思えますが、レスポンダーチェーンに含めるために、私が理解できなかった魔法があるかもしれません。
特定のアプリケーションメニューをリッスンするNSObjectを作成し、それをxibに配置して、接続します。これは、現時点で最善の解決策のように思われます。なぜなら、特定のオブジェクトに到達するためにレスポンダーチェーンに依存することなく、ものを分離できるからです。しかし、アプリを十分なレベルの複雑さにすると、これはレスポンダーチェーンを破壊するため、問題になる可能性があるのではないかと思います。これは、おそらく使いやすさを超えた理由で存在します。
長い質問でごめんなさい。望ましいアプローチはありますか?ありがとう!
objective-c - カスタムビューでNSMenuItemを強調表示しますか?
セットをメニューにNSStatusBar
したシンプルなものを作りました。NSMenu
また、このメニューにいくつか追加しましたNSMenuItems
。これは正常に機能します(セレクターと強調表示を含む)が、カスタムビュー(setView :)を追加するとすぐに、強調表示は発生しません。
そして私のfooメソッドは次のとおりです。
setViewメソッドを削除すると、強調表示されます。
検索して検索しましたが、これを実装/有効化する方法が見つかりません。
編集
NSViewサブクラスのこの質問のコードに従ってハイライトを実装しました。