問題タブ [nsresponder]
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 - Cocoa NSApplicationはアクティブではありませんが、マウスイベントを受信しています
ウィンドウから離れてクリックすると、奇妙な問題が発生します。メインとキーを辞退します。次にクリックして戻ると、クリックしたビューがマウスのクリックに反応しません。しかし、2 回目のクリックでビューが応答します。最初のクリック時にウィンドウがキーではなく、クリックによってウィンドウがキーになり、2 回目のクリックを処理できたかのように。
最初のクリック イベント中にアプリケーションがイベントを取得しているかどうかを確認するために、サブクラスNSApplication
化してインターセプトしました。sendEvent:
さらに、私はレスポンダー チェーンをダンプし、確かに私のビューがチェーン内にあることを確認しましたが、ウィンドウは 2 回目のクリックまで重要ではありませんでした。また、最初のクリック イベントを受け取ったときに、アプリケーションがアクティブになっていないことにも気付きました。これはどのように可能ですか?アプリケーションは、マウス イベントを受け取ったときにアクティブになるはずではありませんか? 鶏卵...
考えや提案はありますか?
更新:ドキュメントを読んだ後、私はこれを見つけました:
マウスダウン イベントは、カーソルがビュー オブジェクト上にあるときにユーザーがマウス ボタンを押すと送信されます。ビューを含むウィンドウがキー ウィンドウでない場合、ウィンドウはキー ウィンドウになり、マウスダウン イベントを破棄します。ただし、ビューは、NSView の acceptFirstMouse: メソッドをオーバーライドして YES を返すことにより、このデフォルトの動作を回避できます。
それで、それが起こっているようです。ただし、オーバーライドしようacceptsFirstMouse:
としacceptsFirstResponder
ましたが、役に立ちませんでした。私の意見はまだ「最初のマウスを受け入れる」ではありません。
ありがとう!
cocoa - NSResponderデリゲートのようなものはありますか?
アプリケーション メニューの私の Cocoa アプリケーションには、delete:
最初の応答者にメッセージを送信するメニュー項目「削除」があります。NSOutlineView
ここで、この場合は最初のレスポンダーである にキーボード フォーカスがあります。サブクラス化を除いて、渡されるメッセージNSOutlineView
を処理する方法はありますか? delete:
もプロトコルNSOutlineViewDelegate
も、これらのアクションを処理するために興味深いものを定義していないようです。NSOutlineViewDataSource
objective-c - Objective-C:別のキーが押されている間に「Shift」キーが押されたことを検出する
これは、キーボードベースのゲームコントローラを実装するためのものです。左/右矢印でキャラクターを歩かせます。Shift + Left / Rightは、キャラクターを走らせます。
これまでに使用しているコードは次のとおりです。
矢印キーを押す前にShiftキーを押すと、これは正常に機能します。しかし、矢印キーが押されて加速する必要がある場合、Shiftキーを押しても何も起こりません...
だから、私はこの種の答えを見ます: https ://stackoverflow.com/a/420691/987818
しかし、このNSResponderがどこで使用されているのかわかりません。参考までに、Cocos2D(objcゲームエンジン)を使用しています。
リードをありがとう:-)J。
objective-c - 解釈キーイベントを表示します:しかし、不要なものをレスポンダーチェーンに渡しますか?
カスタムビューを、、、などで機能さ-moveLeft:
せたいのですが、気にしないキーをレスポンダーチェーンの上位に渡したいのです。今、私は電話をかけることを上書きしていますが、これは私の見解が応答しないものでさえ、すべての重要なイベントを占有しているようです。-deleteForward:
-selectAll:
-keyDown:
[self interpretKeyEvents:[NSArray arrayWithObject:event]];
不要なイベントをチェーンに渡すが、それでも応答する方法-moveLeft:
などはありますか?-keyDown:
または、自分が何をしたか、何に応答しなかったかを知るために、自分のすべてのアクションを実装する必要がありますか?
cocoa - セルベースのテーブル ビューの編集中に元に戻すのインターセプト
テーブル ビュー セルのテキスト編集セッション中に、Cmd-Z/Shift-Cmd-Z をインターセプトまたは無効にしたいと考えています。
これは、値が相互に影響する一連の列を含むセルベースのテーブル ビューであり、一部の列に入力すると他の列に自動的に入力されます。ユーザーが編集セッションの途中で Cmd-Z を押すと、元に戻すマネージャーが現在編集中のプロパティを変更する可能性があり、ユーザーを混乱させる結果になります。
次に例を示します。
ステップ 1: ユーザーは 2 列目に「.030」と入力します。
ステップ 2: ユーザーがタブを押すと、モデルは列 3、4、および 5 を自動的に更新します。
ステップ 3: ユーザーが Ctrl-Z を押すと、モデルは列 2、3、4、および 5 への変更を元に戻しますが、編集セッションがまだ進行中であるため、古い値が列 3 に表示されます。
ステップ 4: ユーザーが何も入力せずにタブを押して編集をキャンセルすると、3 列目の値が消えます。
ここで実際に「間違った」ことは何も起きていませんが、混乱を招きます。
セルの 1 つが編集されているときに、Cmd-Z と Shift-Cmd-Z をインターセプトして無視したいだけです。-keyDown:
その編集中にファーストレスポンダーであるものは何でもオーバーライドする必要があると思います。しかし、それは何ですか?テーブル ビューはこれらの重要なイベントをまったく取得せず、セルもレスポンダーではありません。
cocoa - NSMenu のデリゲート メンバー
私の理解では、委任クラスは常にクラスから継承するNSResponder
クラスであり、からdelegate
継承するクラスでのみ使用できます NSResponder
。NSMenu
から直接継承してNSObject
いるのに、なぜ に表示deletgate
されるの outlets
ですか? それとも、Interface Builder でオブジェクトを Ctrl キーを押しながらクリックした後に表示されるオプションを誤解しているのでしょうか? なるほどOutlets
、 これReferencing outlets
はReceived Actions
どういう意味ですか?問題があれば、Xcode 4 (10.7.3) を使用しています。
objective-c - NSControl (NSTokenField など) でマウス イベントを無視する方法
具体的には、編集を許可せずにトークン化された方法でデータを表示するためだけにNSTokenField
使用しているため、マウスイベントを無視したいと思います。NSTableCellView
トークン フィールドの設定はenabled = NO
機能しますが、トークンがグレー表示され、テキストが読みにくくなります。
トークン フィールドを設定するeditable = NO
と、トークン フィールドの外観を維持したまま編集できなくなりますが、トークンにマウスを合わせるとトークンが点灯します。それを防ぐことができれば、私は商売をしていたのに。
何かをサブクラス化し、いくつかのNSResponder
メソッドをオーバーライドする必要があると思われますが、何をすべきかよくわかりません。サブクラス化NSTokenField
とオーバーライドmouseEntered:
を試みmouseMoved:
、何もしないようにしましたが、それもうまくいきませんでした。
objective-c - NSControl サブクラスは firstResponder を変更すべきではありません
タブバー ビューを NSControl サブクラスとして実装しました。
クリックすると、AppKit がfirstResponder
NSWindow の更新を試みます。firstResponder
タブバーが(acceptsFirstResponder
戻る)になりたくないのでNO
、NSWindow 自体がfirstResponder
. 私のレスポンダー チェーンはウィンドウとそのコントローラーで構成され、アクション メッセージはタブバーの下のサブビュー (NSOutlineView) に配信されません。タブバーをクリックしたときに、NSOutlineView がアクション メッセージとイベントを受信し続けるようにしたいと思います。
これを行う適切な方法は何ですか?firstResponder
クリックされたときに NSView が変更を試みるのを止める方法はありませんか?
nextResponder
ツールバーを NSOutlineView に設定することを考えましたnextResponder
が、NSView を手動で変更することは Apple によって推奨されていません。
objective-c - キーボードで NSSegmentedControl を制御する
Cocoa アプリに、キーボードから制御できるようにしたい NSSegmentedControl を含むフォームがあります。ただし、NSSegmentedControl はファーストレスポンダーになることを非常に嫌がっているようです。
ウィンドウの最初のファーストレスポンダーをセグメント化されたコントロールに設定しても、何も起こりません。ウィンドウが最初に読み込まれたときに、キーボード フォーカスがありません。ただし、次のようにファーストレスポンダーを手動で設定すると、フォーカスを受け取ります。
[segmentedControl.window makeFirstResponder: segmentedControl];
フォームの唯一の部分がセグメント化されたコントロールである場合、これはうまく機能します。別のフィールド (NSTextField など) を追加し、セグメント化されたコントロールの nextResponder をそのフィールドに設定すると、セグメント化されたコントロールはファーストレスポンダーにはなりません。フォーカスはすぐにテキスト フィールドに移動し、タブを押してセグメント化されたコントロールに戻ることはできません。
NSSegmentedControl をサブクラス化し、acceptsFirstResponder、becomeFirstResponder などをオーバーライドしようとしましたが、役に立ちませんでした。違いを生むのはresignFirstResponderだけです。そのメソッドからNOを返すと、セグメント化されたコントロールは実際にフォーカスを保持しますが、常にフォーカスを保持したくないことは明らかです。
コントロールを通常のレスポンダーのように動作させる方法についてのアイデアはありますか?
macos - オブジェクト (コントローラーまたはビュー) が辞任したファーストレスポンダーを見つける方法は?
特定のオブジェクトが FirstResponder を辞任したときに、クリーンアップ アクティビティを実行したいと考えています。オブジェクトがファーストレスポンダのステータスを辞任したかどうかを検出する方法はありますか?
これを知るためにどのような方法を実装する必要がありますか? これに対する指針はありますか?
私はすでにこのリンクを通過しました。しかし、私はそれから多くを得ることができませんでした。