問題タブ [responder-chain]

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 に答える
323 参照

macos - NSApp.sendAction() はしばらくすると機能します

子カスタム ビュー ( ChildView ) のクリックにViewController ( ContainerVC ) が反応するようにします。

ChildViewでは、クリックを処理するためにオーバーライドmouseDown(_:)します。このメソッドでは、 を介してContainerVCターゲットを呼び出そうとしますNSApp.sendAction(#selector(ContainerVC.childViewClicked(_:)), to: nil, from: self)

なんらかの理由sendActionで、最初はメソッドが失敗します (つまり、false を返します)。またNSApp.target(forAction: #selector(ContainerVC.childViewClicked(_:))、ゼロです。

しばらくすると (通常、カスタム ビューをしばらくクリックした後)、ターゲットが解決され、すべてが正常に機能し、ContainerVC.childViewClicked(_:) が呼び出されます。

ターゲットが解決された時間/クリック数の後に体系的なパターンを見つけることができませんでした (私の Mac で叫ぶ激しさを除いて)。

興味深いことに、ContainerVCを 経由でウィンドウに追加すると、正常に動作しますlet window = NSWindow(contentViewController: ContainerVC())

ContainerVCを分割ビューに追加すると、上記の奇妙な動作が発生します。

CustomViewのレスポンダーチェーンを確認しました。予想どおり、 ContainerVCがチェーンに表示されます。childViewClicked(_:)を実装するチェーン内の他のクラスはありません。

NSApp.sendAction(_:) の内部動作と、ターゲットが最初に nil である理由について誰かが教えてくれれば幸いです。

ViewController を SplitView に追加して適切に接続するときに必要な追加の手順はありますか?

0 投票する
0 に答える
26 参照

cocoa - NSSplitViewでkeyDown:イベントを処理するための適切な設計パターンは何ですか?

複雑な分割ビュー ベースのウィンドウ内のさまざまなサブビューごとに個別の KeyDown: ハンドラーが必要です。さらに、個々のサブビュー ハンドラーによって処理されないすべてのキーに対して、WindowController レベルで "グローバル" KeyDown: ハンドラーが必要です。

NSResponder ドキュメントの私の理解から、次のようなことができるはずです: (疑似コードで - 構文について文句を言わないでください。ここでアイデアをよりよく理解してください。)

しかし、未処理のキーは、私が期待したように、応答チェーンを WindowController に伝播しません。チェーンは ViewController で停止しているようです。

ここで何が欠けていますか?

ありがとう


(疑似コード)