0

子カスタム ビュー ( 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を分割ビューに追加すると、上記の奇妙な動作が発生します。

self.addSplitViewItem(NSSplitViewItem(viewController: ContainerVC())

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

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

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

4

1 に答える 1