3

私は4つのクラス(ビュー)を持っています:
A、B、C、D

クラス A が B に電話し、B が C に電話し、C が D に電話する:
A > B > C > D

クラス DI ではデリゲート プロトコルが実装されており、クラス A でデリゲート イベントをキャッチしたいと考えています。

どうすればこれを達成できますか?

4

2 に答える 2

10

これを達成する方法は複数あります。あなたの場合に何が最善かは、状況によって異なります。ここにいくつかのアイデアがあります:

  1. これらすべてのクラスにデリゲート プロトコルを実装し、単純にそれをそのまま渡すことができます。
  2. A からクラス D にアクセスする ivar を追加して、それを直接渡すことができます (スパゲッティ コードの危険性!)
  3. 可能であれば、実装を変更して、デリゲートのみを A に実装し、そこで処理できるようにすることができます。
  4. 最後の手段として ( Mountain LionNSNotificationsと混同しないでください)を使用できます。NSUserNotificationsクラス A ではデフォルトの通知センターに通知を投稿し、クラス D ではこの通知に登録して必要に応じて処理します。ただし、このアプローチは、他に何も機能しない場合にのみ使用してください。コードがさらに悪化する可能性があるためです。
于 2012-08-15T12:24:20.393 に答える
0

ClassD メンバー デリゲートを ClassA オブジェクトとして割り当てます。

説明させてください

ClassD に UITableView があり、ClassA で ClassD の tableView デリゲートをトリガーする場合は、tableView デリゲートを ClassA オブジェクトとして割り当て、すべての UITableView デリゲートを ClassA に実装します。

例えば:ClassD_tableView.delegate = classAObj;

注: クラス A に ClassD の tableView デリゲート メソッドを実装し、ClassD 内から ClassA の新しいオブジェクトを作成しないでください。パラメータを渡すか、UIResponder を使用して、ClassD の親クラス A を取得できます。

于 2012-08-15T12:20:36.463 に答える