子カスタム ビュー ( 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 に追加して適切に接続するときに必要な追加の手順はありますか?