Objective-C中两个视图控制器之间的双向通信

问题描述 投票:1回答:2

我有一个主Container View控制器,它有一个表视图控制器和另一个视图控制器。在表格视图中,我显示了可以选择和分组的某些项目。此组详细信息显示在视图控制器上(如摘要)。一旦分组,这些项目将不再在表格视图中。如果需要,我甚至可以将它们取消组合并将其添加回表格视图。

因此,这两个视图控制器需要在它们之间具有通信通道。这里最好的方法是什么?协议或块?通知严格禁止。

ios objective-c cocoa-touch
2个回答
1
投票

应用程序的业务逻辑应该与将事物粘合到视图中的代码分开处理 - 您将模型和控制器混为一谈。

因此,项目和分组将由第三类维护。两个视图控制器都会与它通信。他们会在瞬态UI信息之外互相交谈,例如,有人说“这是选择的具体项目”。


1
投票

考虑它的一个好方法是从没有直接沟通的目标开始。相反,两个VC都可以访问应用程序的模型(通常是单例形式),并根据模型的状态配置其状态。换句话说,视图控制器相对于应用程序的模型是有状态的,相对于彼此是无状态的。

但有时候,同一个容器中的vcs必须进行通信,就像选择时的导航控制器一样。这通常是为segue做准备。选择被传送到被推动的vc,然后继续进行。在某种程度上vc需要通过堆栈进行通信,我尝试使用第一个主体:它只是更改模型状态并弹出,依靠其父级来注意viewDidAppear中的更改?

如果我还需要进一步的沟通,我开始担心我的设计,但我接下来的地方是KVO。同样,视图控制器相互之间是被动的,观看应用程序的模型以了解他们关心的更改。我将NSNotification归类于此类别。虽然听起来你想要排除它,但这是我的第三个最喜欢的想法。

当我在这里编辑时,我注意到@Tommy提供了我同意的简明建议(并且与我的观点一致)。我会留下答案,因为它增加了一些细微差别。

© www.soinside.com 2019 - 2024. All rights reserved.