如何从另一个控制器引发事件。

时间:2015-10-12 10:58:40

标签: ios swift swift2

我的课程和视图没有任何关联。我需要创建一个事件,以便在它被引发时我想在另一个视图中更改标签的文本。这样做最正确和最优雅的方法是什么?

5 个答案:

答案 0 :(得分:1)

听起来您正在寻找Event Bus AKA发布/订阅。

这意味着你的控制器可以发布“事件”,你的观点可以成为这些事件的“听众”。因此,当一个事件被调用时,你的观点会有所反应。

查看this open-source库以获得一种简单的方法。

答案 1 :(得分:1)

有很多方法可以实现这一目标。您可以使用协议,通知,键值观察等。如果您使用Reactive Cocoa,您可以使用主题,信号来订阅它们。

由于它们没有直接相互连接而且没有耦合,因此使用委托不是最佳选择。

NSNotification始终有效,但您需要小心在适当的位置添加和删除观察者。您最终可能会崩溃您的应用。通知也很难调试,因为没有直接连接,只有观察者和发布者。尝试集中并限制它以避免副作用。

KVO也可用于观察另一个对象的状态并将其反映到另一个对象。这比使用普通通知更安全,但仍然高度耦合。

我会尝试将它们与另一个对象联系起来。他们可以通过另一个帮助对象进行交谈。如果你想改善它们之间的连接,这也会更好。您可以轻松保持轨道并更改相关值。

答案 2 :(得分:1)

选项1:您可以使用委托模式。

创建委托协议。您的视图控制器类应符合该委托。 每当您需要触发事件时,只需从您的类中调用该委托方法即可。这也将触发视图控制器类中的功能,您可以在其中更新标签的文本。

检查this link以获得详细解释的教程。

选项2:使用KVO(键值观察)

检查this link以了解有关KVO的更多信息。

如果您需要更多代码示例,请注释。

答案 3 :(得分:1)

好像你正在准确描述Reactive Programming的全部内容。模型更改后,您希望相应地更新视图。有两个很棒的库可以为您处理:

  1. ReactiveCocoaRAC 4)如果您希望它与Swift2兼容
  2. RxSwift这是一个更轻巧但非常强大的
  3. 我建议你深入研究并开始享受Reactive Programming范例

答案 4 :(得分:1)

如果你的课程没有相互引用,而且连接它们真的很难,那么使用UINotificationCenter:

NSNotificationCenter addObserver in Swift