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

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

cocoa - Cocoa NSApplicationはアクティブではありませんが、マウスイベントを受信して​​います

ウィンドウから離れてクリックすると、奇妙な問題が発生します。メインとキーを辞退します。次にクリックして戻ると、クリックしたビューがマウスのクリックに反応しません。しかし、2 回目のクリックでビューが応答します。最初のクリック時にウィンドウがキーではなく、クリックによってウィンドウがキーになり、2 回目のクリックを処理できたかのように。

最初のクリック イベント中にアプリケーションがイベントを取得しているかどうかを確認するために、サブクラスNSApplication化してインターセプトしました。sendEvent:さらに、私はレスポンダー チェーンをダンプし、確かに私のビューがチェーン内にあることを確認しましたが、ウィンドウは 2 回目のクリックまで重要ではありませんでした。また、最初のクリック イベントを受け取ったときに、アプリケーションがアクティブになっていないことにも気付きました。これはどのように可能ですか?アプリケーションは、マウス イベントを受け取ったときにアクティブになるはずではありませんか? 鶏卵...

考えや提案はありますか?

更新:ドキュメントを読んだ後、私はこれを見つけました:

マウスダウン イベントは、カーソルがビュー オブジェクト上にあるときにユーザーがマウス ボタンを押すと送信されます。ビューを含むウィンドウがキー ウィンドウでない場合、ウィンドウはキー ウィンドウになり、マウスダウン イベントを破棄します。ただし、ビューは、NSView の acceptFirstMouse: メソッドをオーバーライドして YES を返すことにより、このデフォルトの動作を回避できます。

それで、それが起こっているようです。ただし、オーバーライドしようacceptsFirstMouse:としacceptsFirstResponderましたが、役に立ちませんでした。私の意見はまだ「最初のマウスを受け入れる」ではありません。

ありがとう!

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

cocoa - NSResponderデリゲートのようなものはありますか?

アプリケーション メニューの私の Cocoa アプリケーションには、delete:最初の応答者にメッセージを送信するメニュー項目「削除」があります。NSOutlineViewここで、この場合は最初のレスポンダーである にキーボード フォーカスがあります。サブクラス化を除いて、渡されるメッセージNSOutlineViewを処理する方法はありますか? delete:もプロトコルNSOutlineViewDelegateも、これらのアクションを処理するために興味深いものを定義していないようです。NSOutlineViewDataSource

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

objective-c - Objective-C:別のキーが押されている間に「Shift」キーが押されたことを検出する

これは、キーボードベースのゲームコントローラを実装するためのものです。左/右矢印でキャラクターを歩かせます。Shift + Left / Rightは、キャラクターを走らせます。

これまでに使用しているコードは次のとおりです。

矢印キーを押す前にShiftキーを押すと、これは正常に機能します。しかし、矢印キーが押されて加速する必要がある場合、Shiftキーを押しても何も起こりません...

だから、私はこの種の答えを見ます: https ://stackoverflow.com/a/420691/987818

しかし、このNSResponderがどこで使用されているのかわかりません。参考までに、Cocos2D(objcゲームエンジン)を使用しています。

リードをありがとう:-)J。

0 投票する
3 に答える
2607 参照

objective-c - 解釈キーイベントを表示します:しかし、不要なものをレスポンダーチェーンに渡しますか?

カスタムビューを、、、などで機能さ-moveLeft:せたいのですが、気にしないキーをレスポンダーチェーンの上位に渡したいのです。今、私は電話をかけることを上書きしていますが、これは私の見解が応答しないものでさえ、すべての重要なイベントを占有しているようです。-deleteForward:-selectAll:-keyDown:[self interpretKeyEvents:[NSArray arrayWithObject:event]];

不要なイベントをチェーンに渡すが、それでも応答する方法-moveLeft:などはありますか?-keyDown:または、自分が何をしたか、何に応答しなかったかを知るために、自分のすべてのアクションを実装する必要がありますか?

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

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:その編集中にファーストレスポンダーであるものは何でもオーバーライドする必要があると思います。しかし、それは何ですか?テーブル ビューはこれらの重要なイベントをまったく取得せず、セルもレスポンダーではありません。

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

cocoa - NSMenu のデリゲート メンバー

私の理解では、委任クラスは常にクラスから継承するNSResponderクラスであり、からdelegate継承するクラスでのみ使用できます NSResponderNSMenuから直接継承してNSObjectいるのに、なぜ に表示deletgateされるの outletsですか? それとも、Interface Builder でオブジェクトを Ctrl キーを押しながらクリックした後に表示されるオプションを誤解しているのでしょうか? なるほどOutlets、 これReferencing outletsReceived Actionsどういう意味ですか?問題があれば、Xcode 4 (10.7.3) を使用しています。

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

objective-c - NSControl (NSTokenField など) でマウス イベントを無視する方法

具体的には、編集を許可せずにトークン化された方法でデータを表示するためだけにNSTokenField使用しているため、マウスイベントを無視したいと思います。NSTableCellView

トークン フィールドの設定はenabled = NO機能しますが、トークンがグレー表示され、テキストが読みにくくなります。

トークン フィールドを設定するeditable = NOと、トークン フィールドの外観を維持したまま編集できなくなりますが、トークンにマウスを合わせるとトークンが点灯します。それを防ぐことができれば、私は商売をしていたのに。

何かをサブクラス化し、いくつかのNSResponderメソッドをオーバーライドする必要があると思われますが、何をすべきかよくわかりません。サブクラス化NSTokenFieldとオーバーライドmouseEntered:を試みmouseMoved:、何もしないようにしましたが、それもうまくいきませんでした。

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

objective-c - NSControl サブクラスは firstResponder を変更すべきではありません

タブバー ビューを NSControl サブクラスとして実装しました。

ここに画像の説明を入力

クリックすると、AppKit がfirstResponderNSWindow の更新を試みます。firstResponderタブバーが(acceptsFirstResponder戻る)になりたくないのでNO、NSWindow 自体がfirstResponder. 私のレスポンダー チェーンはウィンドウとそのコントローラーで構成され、アクション メッセージはタブバーの下のサブビュー (NSOutlineView) に配信されません。タブバーをクリックしたときに、NSOutlineView がアクション メッセージとイベントを受信し続けるようにしたいと思います。

これを行う適切な方法は何ですか?firstResponderクリックされたときに NSView が変更を試みるのを止める方法はありませんか?

nextResponderツールバーを NSOutlineView に設定することを考えましたnextResponderが、NSView を手動で変更することは Apple によって推奨されていません。

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

objective-c - キーボードで NSSegmentedControl を制御する

Cocoa アプリに、キーボードから制御できるようにしたい NSSegmentedControl を含むフォームがあります。ただし、NSSegmentedControl はファーストレスポンダーになることを非常に嫌がっているようです。

ウィンドウの最初のファーストレスポンダーをセグメント化されたコントロールに設定しても、何も起こりません。ウィンドウが最初に読み込まれたときに、キーボード フォーカスがありません。ただし、次のようにファーストレスポンダーを手動で設定すると、フォーカスを受け取ります。

[segmentedControl.window makeFirstResponder: segmentedControl];

フォームの唯一の部分がセグメント化されたコントロールである場合、これはうまく機能します。別のフィールド (NSTextField など) を追加し、セグメント化されたコントロールの nextResponder をそのフィールドに設定すると、セグメント化されたコントロールはファーストレスポンダーにはなりません。フォーカスはすぐにテキスト フィールドに移動し、タブを押してセグメント化されたコントロールに戻ることはできません。

NSSegmentedControl をサブクラス化し、acceptsFirstResponder、becomeFirstResponder などをオーバーライドしようとしましたが、役に立ちませんでした。違いを生むのはresignFirstResponderだけです。そのメソッドからNOを返すと、セグメント化されたコントロールは実際にフォーカスを保持しますが、常にフォーカスを保持したくないことは明らかです。

コントロールを通常のレスポンダーのように動作させる方法についてのアイデアはありますか?

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

macos - オブジェクト (コントローラーまたはビュー) が辞任したファーストレスポンダーを見つける方法は?

特定のオブジェクトが FirstResponder を辞任したときに、クリーンアップ アクティビティを実行したいと考えています。オブジェクトがファーストレスポンダのステータスを辞任したかどうかを検出する方法はありますか?

これを知るためにどのような方法を実装する必要がありますか? これに対する指針はありますか?

私はすでにこのリンクを通過しました。しかし、私はそれから多くを得ることができませんでした。

タブキーでのNSTableViewとNSOutlineViewの編集