2011-03-02 29 views
9

我有一個應用程序,推動堆棧上的四個viewcontrollers。在第四個視圖控制器中,我做了一個PopViewController,所以我應該回到第三個viewcontroller,並且在viewWillAppear方法中,我做了一個PopToRootViewController。這並沒有讓我回到第一個viewcontroller正確。該代碼是直接的,只是一個彈出viewcontroller,然後回到RootViewController似乎沒有工作

[self.navigationController pushViewController:nextController animated:YES] 
在每個第一3個viewcontrollers的

,並且在第四

[self.navigationController popViewControllerAnimated:YES]. 

在第三視圖控制器,我有一個viewWillAppear中方法,其作用:

[self.navigationController popToRootViewControllerAnimated:YES]. 

當我通過意見,我得到以下內容:

啓動應用程序:

  Back:    Title: FirstLevel 

按OK:

  Back: FirstLevel Title: SecondLevel 

按OK:

  Back: SecondLevel Title: ThirdLevel 

按OK:

  Back: ThirdLevel Title: FourthLevel 

按確定:其持久性有機污染物回1,然後彈出返回根:

  Back: FirstLevel Title: ThirdLevel 

如果我現在按OK:

  Back: ThirdLevel Title: SecondLevel 

我很抱歉,如果這是令人困惑的。我應該能夠彈出一個視圖控制器,然後立即回彈到根目錄?

感謝您的任何幫助。

回答

9

正如Mark所建議的,您應該使用您的4rth視圖控制器中的-popToRootViewController而不是第三個視圖控制器,因爲您的動機是將其彈出到根視圖控制器。

如果你仍然想要實現這個functionalty一些匿名的原因,然後在第三視圖 - 控制,使用:

[self.navigationController popToRootViewControllerAnimated:YES]viewDidAppear方法,而不是viewWillAppear

希望工程:)

1

似乎沒有任何理由回到視圖控制器3,因爲你試圖在視圖控制器3的視圖出現之前轉到根。只需發送-popToRootViewControllerAnimated:即可查看控制器4.

+0

什麼實際上,我試圖做的是得到與第四視圖控制器用戶的一些信息。然後我解僱了這個視圖控制器,並且我可能不需要獲得更多的信息。如果我有所有的信息,那麼我想回到根視圖控制器;否則,我要推另一個視圖控制器來獲取更多信息。我想我可以將信息傳遞給第四個視圖控制器去推動第五個獲取更多信息等等,然後在我擁有我需要的所有東西后,最終彈出到根目錄。 – DNewell 2011-03-02 22:04:49

+0

將調用放在viewDidAppear中似乎工作正常,但是,我確實可以看到其他視圖的實例,看起來不是很專業。除了改變架構之外,有沒有其他解決方法? – DNewell 2011-03-02 22:13:34

+0

從用戶體驗的角度來看,推送第5個控制器以獲取更多信息對於用戶來說不會造成混淆。 – 2011-03-02 22:32:37