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

时间:2014-07-11 03:06:10

标签: ios objective-c cocoa-touch

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

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

2 个答案:

答案 0 :(得分:1)

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

因此,项目和分组将由第三类维护。两个视图控制器都会与它通信。除了暂时的用户界面信息之外,他们还会互相交谈,例如,一个人说'#34;这是选择的特定项目"。

答案 1 :(得分:1)

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

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

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

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