我知道如何在直接依赖的ViewController之间建立“正常”委派。所以如果我说,我必须从一个视图发送一个消息到它上面的一个,我知道怎么做。但是,如果两者之间有更多的ViewControllers,我如何设置委托呢?
假设我有一个根据方案的设置:
ViewController1->ViewController2->ViewController3(通过ButtonPressed)(通过ButtonPressed)
如果我想从VC2在VC1中设置一个(例如)NSString,我只需写入prepareForSegue中,在那里我调用VC2:
VC2.delegate = self;
但是,当我想在VC3和VC1之间传输数据而不必改变VC2时,我该怎么办呢?如果委托不是“self”,我将它设置为什么?我知道我的描述很糟糕,但我无法描述得更好。
我只想要这个:VC1有一个按钮和一个标签;按钮打开VC2,也有一个按钮,但没有标签;此VC2按钮显示VC3;通过触摸VC3中的按钮,我想改变VC1中的标签。但不需要将一个委托设置为VC2,然后将另一个委托设置为VC1,我知道这是如何工作的。
希望你得到我想要的。
提前道谢!
如果您不想仅仅为了将两个不相关的视图链接在一起而维护过多的指针,则NSNotificationCenter可能会有所帮助。
您可以将委托从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];