すべてのクラスが他のすべてのクラスを知っているようにクラスを編成するのはよくないとよく耳にします。そのため、他のクラスのプロパティとして存在するクラスには、親について知らないようにしています。しかし、UIView では実現できません。
問題はUIViewsだけでなく発生するため、質問はより一般的な背景から来ています。4 つのインスタンス変数として 4 つの車輪を持つオブジェクトとして車があり、左前輪が破裂した場合。左後輪がメッセージを受け取るはずです。良い方法でシステムを設計するにはどうすればよいですか?
Objective-C の UIView の例: 画面全体にカスタム UIView を使用しています。すべてのレイアウトを管理します。2 つのサブビューだけでシンプルに保たれているとしましょう。
@interface BackgroundView : UIControllerView {
CustomViewA *buttonA;
CustomViewB *buttonB;
}
@end
@interface CustomViewA : UIButton
@interface CustomViewB : UIButton
誰かがボタン A を押すと、ボタン B が何かをする必要があります (例: 赤に変わります)。私が見るいくつかのオプションがあります:
- ボタン A のデリゲートをボタン B に設定すると、A のすべてのイベントが B の実装ファイルに送られます。すべてのイベントがボタン B と関係があるとは限りません。
- BackgroundView のシングルトンを作成し、ボタン A にボタン B のプロパティを取得させるか、ボタン B への呼び出しを転送する BackgroundView のメソッドを呼び出します。複数の Background が必要な場合は、2 つの BackgroundView を持つさらに上位のクラスを作成できます。 (いい音ではありません)。
- UIViews に実装された親を呼び出してから、2 のようにメソッドを呼び出すか、直接変更します。UIView を使用しない場合の問題は、機能を他の「親」クラスにコピーしますか?
このような問題を解決するより良い方法はありますか? または、1 つの方法を大幅に最適化できますか?