2010-10-15 75 views
1

我一直在想这件事,并通过另一个stackoverflow question阅读了有关在视图控制器之间进行通信的最佳推荐方式。然而,这个问题/答案似乎并没有解决逆向行为的最佳方法。什么是逆转视图控制器之间通信的最佳方式?

即从ParentController数据传递给它的ModalController,我们可以初始化ModalControllerinitWithDataToProcess:

但是如果我们想要做反向?我将如何通知前一位控制员有关新数据?

例如用户点击ParentController上的“新人”按钮。我启动一个新的ModalController,并通过presentModalViewController:向用户提供人员编辑器视图。用户点击'完成'添加一个新人。 I dismissModalViewController:和UI返回到ParentController的视图。

使用全局字段引用单例对象(应用程序委托或其他)是不好的。 代表团(通过正式协议)和通知(通过NSNotificationCenter)似乎矫枉过正。有什么建议么?

+0

在.NET领域,这不是问题,因为模态调用('ShowDialog()')是一个阻塞调用。 Objective-C/Cocoa与'presentModalViewController:' – JeffreySadeli 2010-10-15 16:06:28

回答

0

代表几乎是你可以做的最低限度。如果您认为为此声明新的协议太麻烦了,只需传入父视图控制器并让模态调用一个方法就可以了。

+1

* HOW *你好吗?只是通过它“...和”有模态的人叫它“吗? (为什么很多人用“你这样做......只是这样做”来回答问题......而不是告诉你怎么做?) – Patricia 2010-10-16 03:10:45

1

它通常使用通知更清洁。只需添加您的观察者这样....

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(somethingHappened:) name:@"MyNotification" object:nil]; 

,并在你的代码的其他地方,只要你需要,你会发布通知。

[[NSNotificationCenter defaultCenter] postNotificationName:@"MyNotification" object:self]; 

在这个例子中,我通过自己,但你可以通过你想真正的任何物体,它会被输送到你的somethingHappened:功能

最重要的事情是保持@“MyNotification”很描述性和独特性。将项目名称添加到开头是保持独特性的好方法...例如。 @“ProjAXViewHasGotData”

相关问题