2012-10-05 60 views
1

navigationController內部,當我在ChildViewController中時以及當用戶點擊後退按鈕時。我希望在我離開之前將一些數據發送到parentViewController當按下後退按鈕時做事情

是任何簡單的,爲什麼要做到這一點,除了使用

-(void)viewWillDisappear; 

首先,因爲這ChildViewController也有自己的孩子,而當它被推開,viewWillDisappear被稱爲好。

二,當我用戶點擊主頁按鈕。 (我猜)

請問,任何合理和正確的方法來做到這一點?

回答

2

您可以在任何的下列方式做到這一點:

  1. 發送通知時,第二個控制器會消失,並有家長聽它。

  2. 創建委託協議,讓第二個控制器直接引用父方法。

  3. 使用父母的viewWillAppear:並檢查isMovingToParentViewController屬性是否只是重新顯示。

並應用最適合您的值傳遞條件和值的可用性。

+0

前兩個似乎不起作用,因爲我們不知道什麼時候用戶點擊後退按鈕,除了檢測到'viewWillDisappear'。但在'ViewWillDisappear'中,我們不知道它是否被彈出或推送給一個VC子。所以沒有辦法發送通知或執行委託方法。最後一個看起來很棒。你是如何找到這些屬性的?你讀過整個UIViewController引用嗎? –

+0

好,這些是視圖生命週期中考慮的一般屬性。 – Arvind

2

我會用UINavigationControllerDelegate來解決這個問題。

在這種情況下,您可以使用它來跟蹤您的控制器,並且可以實現navigationController:willShowViewController:animated:以在控制器之間傳輸所需的數據。它比嘗試掛接viewWillDisappear通知要乾淨得多,因爲您可以隔離該代理內的數據傳輸邏輯,而不是在每個控制器中都有它的片段。

+0

我認爲那兩個代表太簡單了,也許對一個級別的導航有用......但是似乎並沒有在多個層面上工作。因爲我們不知道它是否接到電話,因爲孩子正在流行或父母正在推動。 thx雖然答案雖然;) –

+0

我沒有得到該評論,但確定。對我來說至少...... – mprivat

4

下面是一個很好的簡單解決方案,它解決了在顯示modalViewControllers或進一步推送viewController時調用viewWillDisappear的問題。例如。檢測出我們實際上從堆棧中取出的情況。

-(void)viewWillDisappear:(BOOL)animated { 
    NSUInteger ind = [[self.navigationController viewControllers] indexOfObject:self]; 
    if (ind == NSNotFound) { 
     // do something, we're coming off the stack. 
    } 
} 

這樣做的好處是你不需要繼承UINavigationController。

來源:http://objectivesea.tumblr.com/post/21705735018/poppingoffthestack

+1

這似乎是一個可怕的伎倆,如果不是@Arvind提供的答案,我會選擇你。 'isMovingToParentViewController'和'isMoveFromParentController'看起來更加官方;) –

相關問題