2013-10-24 73 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