3

我有 4 个类(视图):
A、B、C 和 D

A 类调用 B,B 类调用 C,C 类调用 D:
A > B > C > D

在类 DI 中实现了一个委托协议,我想在类 A 中捕获委托事件。

我怎样才能做到这一点?

4

2 回答 2

10

有多种方法可以实现这一目标。在你的情况下什么是最好的取决于具体情况。这里有一些想法:

  1. 您可以在所有这些类中实现委托协议,然后简单地将其传递下去。
  2. 您可以添加一个 ivar 以从 A 访问 D 类并直接传递它(意大利面条代码的危险!)
  3. 如果可能的话,您可以更改您的实现,以便您只在 A 中实现委托并在那里处理它。
  4. 最后的手段可能是使用NSNotifications(不要与NSUserNotifications山狮混淆)。在您的 A 类中,您将通知发布到默认通知中心,在 D 类中,您注册到此通知并根据需要处理它。只有在没有其他方法的情况下才使用这种方法,因为这可能会导致更糟糕的代码。
于 2012-08-15T12:24:20.393 回答
0

将 ClassD 成员委托分配为 ClassA 对象。

让我解释

如果您在 ClassD 中有一个 UITableView,并且想要触发 ClassA 中的 ClassD tableView Delegates,那么让 tableView 代理分配为 ClassA 对象并在 ClassA 中实现所有 UITableView 代理。

例如:ClassD_tableView.delegate = classAObj;

注意:在 Class A 中实现 ClassD tableView 委托方法,不要从 ClassD 内部创建 ClassA 的新对象。您可以通过传递参数或使用 UIResponder 来获取 ClassD 中的父类 A。

于 2012-08-15T12:20:36.463 回答