2013-03-01 99 views
-1

下面是我的導航控制器的層次dismissViewController工作不正常

MainViewController 
     | 
     | 
     DetailViewController 

那我在上DetailViewController

[self presentViewController:reminderController animated:YES completion:nil]; 

以下導航到ReminderViewController後,在某些點上我做

[self dismissViewControllerAnimated:YES completion:nil]; 

但是,它使我回到MainViewController而不是Detai lViewController

這很奇怪。對這個問題有什麼想法?

編輯:

我對DetailViewController做presentViewController: reminderController animated: completion:因爲reminderController用於發送提醒的原因。就像goole應用程序或其他應用程序一樣,當發送某物時,我們正在使用presentViewController。

+0

你爲什麼不使用push和pop viewcontrollers? – 2013-03-01 19:36:56

+1

如何從MainViewController提供DetailViewController? – colincameron 2013-03-01 19:37:35

+0

@ X-Factor + @ c.cam:參見OP。我剛剛編輯 – tranvutuan 2013-03-01 19:45:58

回答

-1

而不是使用dismissViewController:animated:使用

[self.navigationController popViewControllerAnimated:YES]; 

dismissViewController:animated的刪除所有UIViewController,它出現。

如果您閱讀UIViewController和UINavigationController引用,您將節省很多麻煩。兩次;)

請參閱this post瞭解更多詳情。

+0

你不能使用'[self.navigationController popViewControllerAnimated:YES];'關於OP,因爲我在DetailViewController上使用了'presentViewController:reminderController animated:completion:'。 – tranvutuan 2013-03-01 20:00:02

+0

這是不正確的。如果你呈現一個視圖控制器(模態),那麼你使用dismissViewControllerAnimated:completion:來消除它。 OP的項目還需要進行其他工作。 – rdelmar 2013-03-01 20:37:32

+0

@rdelmar:抱歉,iam糊塗了。爲什麼我錯了。 OP使用模態呈現視圖。 – tranvutuan 2013-03-01 20:43:49

2

這裏是關於UIViewController類的文檔的一個示例:

所述呈現視圖控制器負責貶呈現的視圖控制器。如果您在呈現的視圖控制器本身上調用此方法,它會自動將該消息轉發給呈現視圖控制器。

如果您連續呈現幾個視圖控制器,從而構建呈現視圖控制器的堆棧,則在堆棧中較低視圖控制器上調用此方法會取消其立即子視圖控制器以及堆棧上該子級上的所有視圖控制器。當發生這種情況時,只有最頂級的觀點纔會以動畫形式被解僱;任何中間視圖控制器都可以簡單地從堆棧中移除。最頂層的視圖使用其模式轉換樣式被解散,這可能與堆棧中較低視圖控制器使用的樣式不同。

因此,我認爲你應該先使用SEGUE把你DetailViewController,然後呈現reminderController模態,你會以後能夠使用dismissViewControllerAnimated:completion:沒有解僱DetailViewController解僱。