关于使用委托在视图控制器之间传递数据

时间:2013-07-29 00:02:05

标签: ios oop uiviewcontroller delegates segue

第一个情景:

我有两个视图控制器

VC1有一个按钮和一个标签

VC2有一个按钮和一个文本字段

VC1之间的模态segue - > VC2

当我运行这个segue时,我们将VC1设置为VC2的委托。

我们转到VC2,填写文本字段,点击按钮,VC2被解雇。

在VC1上运行一些委托方法,并填写VC1.label。

问题:有没有办法在没有解雇VC2的情况下这样做...例如,如果VC2.button只是模态将我们反驳,或者将我们拉回到VC1我假设它重新初始化了viewcontroller并且标签不会改变了。你总是不得不关闭视图控制器

情景2:

再次,两个视图控制器。

这次它反转..所以我有

带有文本字段和按钮的VC1

带有标签和按钮的VC2

soo现在我们填写VC1,我们希望它出现在VC2上。但如果没有塞格,他们没有任何关系。有没有办法在使用委托而没有一个初始segue的情况下在VC之间传递数据?这个segue要求使用特定于委托控制器的委托吗?我假设它是因为在其他情况下我们只是实例化对象,并使用他们的委托方法。但是对于视图控制器,我们想引用一个已经创建的控制器,而不是实例化第二个。

注意:我正在使用故事板

2 个答案:

答案 0 :(得分:0)

对不起,不完全明白你想要的......但这是我的看法。

第一个情景:

为什么需要更新屏幕上的视图?

只需在viewWillAppear中更新。

否则,当您完成对该文本字段的编辑时,您可以让委托更新它。

情景2:

您需要在视图控制器之间建立链接,使用segues变得简单,设置为委托并传递信息。为什么要让它变得比它需要的更难

很多事情都有代表,文本字段等,你只是说这个类/ obj会为别的东西做些什么。

有许多关于代表的youTubes,即

http://www.youtube.com/watch?v=eNmZEXNQheE

有关详细信息,请参阅此帖子 - 它涵盖了您需要知道的所有内容

Passing Data between View Controllers

答案 1 :(得分:0)

1)你可以在不解雇VC2的情况下做到这一点,但这不是一个好主意。您不希望将“返回”归结为一个,因为,正如您所推测的那样,您实际上是在创建一个新的VC1实例,然后如果再次转向VC2,您也会创建一个新的实例。您将继续堆积越来越多的两个控制器实例,并且不会释放任何实例。

2)同样,你的直觉是正确的 - 你需要以某种方式获得对你投入屏幕的VC2实例的引用,以便将自己设置为委托。你不必有一个segue来做那个,你可以在代码中创建第二个控制器并做一个手动推送或presentViewController,但这在功能上,就像做一个segue一样。