2010-08-03 30 views
0

我能夠通過將其視圖控制器推入導航堆棧,從視圖控制器向視圖控制器傳遞一個變量。怎麼我會是這樣一個例子:在導航堆棧上傳遞變量? - iPhone

MyViewController *controller = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil]; 
controller.myString = stringToPass; 
[self.navigationController pushViewController:controller animated:YES]; 
[controller release]; 

但是,我該怎麼辦,如果我想回傳給一個變量UP導航堆棧?使用popViewControllerAnimated而不是pushViewController不會像我想象的那樣傳遞變量。

我需要能夠從它在定義的視圖控制器最多訪問變量幾個彈出。

任何幫助,將不勝感激:)

回答

0

您傳遞值而不是變量。

視圖控制器不應該負責自行彈出。使用Apple的視圖控制器(例如UIImagePicker),父視圖控制器負責執行彈出操作;父VC也可以獲取當前值。 (不完全正確;它可能會在應用鍵盤自動完成之前訪問該值)

或者,如果它是可以全局共享的值,則可以將其存儲在應用程序委託中。

+0

謝謝你的幫助:) – Martyn 2010-08-03 21:05:45

0

你可以導航控制器的保持在VC堆棧中使用self.navigationController。您可以撥打一些方法,如

[self.navigationController setMyString:stringToPassUp]; 

還有其他幾種方法, self.tabBarController在堆棧中的tabbarcontroller起來,或者最簡單的

[self.parentViewController setMyString:stringToPassUp]; 

編輯給出的例子downvotes以上,沒有人給出一個更好的解釋,讓我們討論的適當的方式來做到這一點。

如果你有一些物體(如您的MyViewController *controller)和對象有件事要告訴你,通常的做法是這樣的:

  • MyViewController得到一個delegate屬性,類型(id)
  • 視圖控制器實例化MyViewController,設置此代理屬性,如下所示:
    controller.delegate = self;
  • MyViewController會在有些事情要說時做類似的事情:
    [self.delegate delegateMessage:arg1];以「傳遞訊息」爲準。

要做到這一點很好,你可能想創建自己的@protocol MyViewControllerDelegate,並宣佈這將是設置controller.delegate = self;採納該協議,通過把<MyViewControllerDelegate>在@interface行的類。然後將MyViewController的delegate屬性聲明爲id<MyViewControllerDelegate> delegate;,以便[self.delegate ...]消息可以與協議規範相匹配。

基本上整個Cocoa Touch API都是這樣工作的。只要看看如何實現您的互動的想法。

+1

什麼是downvotes?! – mvds 2010-08-03 18:00:35

+1

他們不是我的,但我認爲他們是因爲你正在推銷一些不可思議的流量控制思想。 – 2010-08-03 18:47:16

+1

;-)只是回答這個問題... – mvds 2010-08-03 18:51:19