問題タブ [nsmenu]
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 - メニューを開いたときに最初に強調表示される NSMenuItem 項目を制御する方法はありますか?
エディター ウィンドウの上部にある Xcode 3 に似た、シンボル ポップアップ ボタンの詳細に取り組んでいます。
NSMenu
私のコントローラ オブジェクトは、が表示されているときに表示されるのデリゲートですNSPopUpButton
。2 つの方法を実装しnumberOfItemsInMenu:
、menu:updateItem:atIndex:shouldCancel:
メニューが表示される直前にメニューを設定します。
ただし、選択したもののタイトルと画像はNSMenuItem
、ユーザーがエディターNSTextView
で選択を変更するか、テキストを変更するたびに変更する必要があります。Xcode の場合と同様です。
私が抱えている問題は、メニューに適切な数のアイテムがまだないため、ユーザーが をクリックしてNSPopUpButton
を表示するNSMenu
と、選択されNSMenuItem
たアイテムと選択されるべきアイテムが一致しないことです。
NSMenuItem
ユーザーがクリックしてメニューを開いたときに、最初に強調表示され、追跡されるものを制御する方法があるかどうか疑問に思っています。現状では、常に強調表示して追跡する最初の項目、またはユーザーが以前に項目を選択した場合は、その項目が強調表示されて追跡されます。
できる限り説明しようとしましたが、これが私の問題を示す画像です。
ユーザーがメニューを開いたときに、強調表示された項目を選択した項目と同じにしたい。何か案は?
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 - NSTextfield + NSMenu とファーストレスポンダ
独自の自動補完システムを実装しようとしています (結果は sqlite データベースから取得されます)
NSTextField と適切なデリゲートを設定しました。NSTextField のテキストが変更されるたびに、- (void)controlTextDidChange:(NSNotification *)aNotification
メソッドを呼び出します
このメソッドでは、プログラムでメニューを作成し、最後にそのコードで呼び出し/表示します。
address
は私のもので、私NSTextField
のmenu
ものはどこですかNSMenu
。問題は、メニューがフォーカスを取得するため、テキスト フィールドに 1 文字しか入力できず、メニューがファーストレスポンダになったため、テキストを入力できなくなることです。
私の質問は、メニューを表示し、テキスト フィールドをファーストレスポンダーとして保持して、フィールド内のテキストが変更されるたびにメニューがリロードされている間に入力できるようにする方法です。
たとえば、実際にはSafariやChromeのアドレスバーのようにする必要があります。
objective-c - クリック後にNSMenuItemからハイライトを削除しますか?
NSMenuItemのサブクラス(NSStatusMenuにあります)にカスタムビューを追加しました。これは、デフォルトでは、青/灰色の背景で「ハイライト」されないことを意味します。
次のコードを使用してこれを実装しました。
メニュー項目はうまく強調表示され、各項目をクリックすることもできます。ただし、それらをクリックすると、メニューを再度開いたときにisHighlighted状態が維持されているように見えます。
クリックすると、次にメニューを開いたときに強調表示された状態が削除されるように変更する方法はありますか?
cocoa - NSMenu のサブクラスが応答しないのはなぜですか?
別の xib ファイルにメニュー リソースを作成し、次のようにサブクラス NSMenu にし、ファイルの所有者を StatusMenu にしました。
show メソッドは次のように実装されています。
次に、次のようにアプリのデリゲートで StatusMenu インスタンスを作成して起動しました
これで、ステータス バーにアイコンが表示されます。しかし、アイコンをクリックしても反応がありません。何が間違っている可能性がありますか?
cocoa - Cocoa:ステータスメニューを自動的に閉じる
ステータスバーにステータスメニューがあり、舞台裏でいくつかのタスクを実行しています。タスクの1つが完了したら、メニューが表示されている(ドロップダウンされている)ときに、メニューが自動的にドロップダウンモード(メニューアイコン上でマウスを左クリックするふりをする)にならないようにしたいとします。それを行う方法はありますか?
cocoa - Cocoa アプリケーション メニュー - 再作成する方法は?
MainMenu.xib 内で、(ファイル/編集/フォーマット/表示/ウィンドウ/ヘルプ メニューと共に) アプリケーション メニューを自動的に提供する既定のメイン メニューを削除しました。
これをアプリケーションに追加するには、どのような手順を踏む必要がありますか?
objective-c - Cocoaアプリの[最近開いた]メニュー項目を削除します
私はこれを尋ねる(最近のアイテムのサブメニューを削除または無効にする)多くの人々を見つけましたが、答えはありません。
少し調査した後...問題は、Appleがその特定のメニューを常に表示するように密かにハードコーディングしていることです。削除しても、NSWindowControllerはサイレントに再作成します。
objective-c - 再度切り替えるまで NSStatusItem にフォーカスし続ける方法
NSStatusItem を使用するアプリを構築しています。クリックすると NSStatusItem が開き、ユーザーが NSStatusItem を再度クリックするまで開いたままにしたいです。現時点では、メニューが開きますが、メニューから離れたり、別のアプリをクリックしたりすると、NSStatusItem はフォーカスを失います。ユーザーがクリックして閉じるまで、NSStatusItemのメニューを開いたままにしておきます。これまでのところ、NSStatusItem を作成するためのコードは次のとおりです。ありがとう