2013-10-24 40 views
0

我知道如何在ViewController之间建立一个“正常”的委托,它们直接相关。所以,如果我说,我必须从一个视图发送消息到其上一个视图,我知道如何做到这一点。 但是我如何设置一个委托,如果两个之间有更多的ViewControllers?ViewControllers之间的授权

SO 3 M比方说,我根据方案有这样的设置:

ViewController1 - > ViewController2 - > ViewController3 (通过ButtonPressed)(通过ButtonPressed)

如果我想成立一​​个(例如)从VC2的NSString在VC1,我只是写入prepareForSegue,在那里我称之为VC2:

VC2.delegate = self; 

可是我该怎么办时,我想,而不必改变VC2 VC3和VC1之间传输数据? 如果不是“自我”,我该如何设置代表? 我知道我的描述很糟糕,但我无法更好地描述它。

我只想这样:VC1有一个按钮和一个标签;该按钮打开VC2,它也有一个按钮,但没有标签;这个VC2Button显示VC3;通过触摸VC3中的按钮,我想更改VC1中的标签。但是,无需将代理人设置为VC2,然后再将代理人设置为VC1,我知道这是如何工作的。

希望你得到我想要的。

在此先感谢!

+0

检查其他通讯源,如NSNotification或KVO。 –

+0

谢谢! NSNotification解决了它! – Gustl007

回答

0

NSNotificationCenter可以帮助,如果你不想保持太多的三分球只是两个不相干的观点联系在一起。

0

您可以通过从VC2委托给VC3这样的:

Inside VC1: 
VC2 *vc2 = [VC2 alloc] init]; 
vc2.delegate = self; 

Inside VC2: 
VC3 *vc3 = [VC3 alloc] init]; 
vc3.delegate = self.delegate; 

或者你可以使用目标选择设计模式来实现这一目标。

目标,选择的方式:

Inside VC1: 
VC2 *vc2 = [VC2 alloc] initWithTarget:(id)iTarget andSelector:(SEL)iSelector]; 

Inside VC2: Pass on the target/selector received from VC1 
VC3 *vc3 = [VC3 alloc] initWithTarget:(id)iTarget andSelector:(SEL)iSelector]; 
+0

但是接下来我必须从每个ViewController中的VC3导入头文件和协议?所以也在VC2中。 目标选择器设计模式如何工作? – Gustl007

+0

我已经更新了我对目标选择器的回答。 – Abhinav

+0

好的抱歉,但我不明白。这两种方式之间有什么重大区别?在我看来,他们有同样的努力.. – Gustl007