我的课程和视图没有任何关联。我需要创建一个事件,以便在它被引发时我想在另一个视图中更改标签的文本。这样做最正确和最优雅的方法是什么?
答案 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的全部内容。模型更改后,您希望相应地更新视图。有两个很棒的库可以为您处理:
我建议你深入研究并开始享受Reactive Programming范例
答案 4 :(得分:1)
如果你的课程没有相互引用,而且连接它们真的很难,那么使用UINotificationCenter: