2010-03-19 77 views
14

我無法讓我的模態視圖控制器才能正常顯示。我具有父視圖控制器,是用於模態視圖甲委託。模態視圖AI呈現模態視圖B,並讓代表dimiss模態視圖A.問題解僱多模態視圖控制器

當模態視圖B出現時,它似乎顯示但屏幕變暗,並且UI鎖定,但該應用程序不會崩潰。我將動畫設置設爲NO,但我仍然遇到同樣的問題。

事件的順序:

  1. 父視圖顯示模式視圖一個
  2. 模式視圖A顯示模式視圖中的B模式視圖控制器
  3. 父視圖駁回模態視圖A在模式視圖通過控制器代表團
  4. 這是我的UI掛起,我可以看到模態視圖B,但不能點擊它,或做任何事情

回答

4

通過讓我parentViewController充當委託解決。這裏是我的命令:

[parentView presentViewController:modalViewControllerA animated:YES] 
[parentView dismissModalViewControllerAnimated:YES] 
[parentView presentViewController:modalViewControllerB animated:YES] 
//Modal B dismisses himself 

在我的委託方法,我需要確保我解僱一個模態呈現莫代爾乙

+0

非常感謝。它真的幫了我很多.... – Hemang 2012-10-12 12:15:59

4

模態視圖控制器必須具有父視圖控制器才能顯示。如果您關閉父視圖控制器(「模式的看法A」,你的情況),行爲將是不可預測的。

如果你確信嵌套模式視圖控制器是你真正想要的,你需要解僱他們以相反的順序;等到你完成了「B」,然後解僱「B」,然後解僱「A」。

如果你不需要的模態表現風格,你會使用一個UINavigationController保持你的視圖控制器的堆棧會更好。

更新:這裏是我會怎樣重新安排你的事件順序。爲清晰起見,提供代碼。

  1. [parentView presentViewController:modalViewControllerA animated:YES]
  2. [modalViewControllerA presentViewController:modalViewControllerB animated:YES]
  3. [modalViewControllerA dismissModalViewControllerAnimated:YES]
  4. [parentView dismissModalViewControllerAnimated:YES]
+0

我修改了我的問題,並顯示我的事件順序。我以相反的順序解僱他們。 – 2010-03-19 01:27:48

+0

您是否在步驟3之前解僱了Modal View B?如果沒有,那個順序對我來說仍然不正確。 – Tom 2010-03-19 01:35:38

+0

我不會在步驟3之前解除模態視圖B.我在模態視圖B中有一個取消和完成按鈕,它將自行解除。我希望我可以解除Modal View A,在Modal View B中做一些工作,並解僱他自己。 – 2010-03-19 01:37:50

0

之前可能是很久以後,但..我在同樣的問題,這是唯一的帖子有一些答案。 我沒有得到你通過設置parentViewController自我的代表的意思是不允許的。

什麼,我現在做的是

[self presentModalViewController:ViewControllerA animated:YES]; 
[self dismissModalViewControllerAnimated:YES];// inside ViewControllerA 
[self presentModalViewController:ViewControllerB animated:YES]; 
[self dismissModalViewControllerAnimated:YES];// inside ViewControllerB 

問題是後viewControllerA,viewControllerB觀點並沒有呈現。

感謝,

0

我有一個主視圖,並需要出示modalview1其中一個按鈕呈現modalview2。看起來和你需要的一樣。 但是存在其中轉發到主視圖中modalview2的按鈕。

所以解決方案是: 主視圖顯示UINavigationController與modalview1作爲rootController。然後通過本modalview1 modalview2 「[self.navigationController modalview2動畫:YES];」。

當modal2需要轉發到主視圖,只是使 「[self.parentViewController dismissModalViewControllerAnimated:YES];」並且UINavigationController被隱藏。

希望它很清楚。

0

簡單:

全部關閉觀點:

[self dismissModalViewController animated:YES]; 
[self dismissModalViewController animated:YES]; 
[self dismissModalViewController animated:YES]; 
[self dismissModalViewController animated:YES]; 

(每個添加模式視圖)

然後提出一個新的模式視圖控制器

+0

有了這個解決方案,ModalViewControllers如何降低順序知道什麼時候上面的被解僱? – 2012-07-07 20:44:43

20

您可以使用此

[[[self presentingViewController] presentingViewController] dismissModalViewControllerAnimated:YES]; 
+0

這塊岩石。謝謝! – 2012-10-26 20:44:07

+0

完美解決兄弟,謝謝!!! – Pradip 2013-07-05 06:02:32

+3

有沒有辦法讓中間視圖控制器在解散時不顯示?例如呈現B呈現C.從C,self.presentingViewController.presentingViewController.dismissViewController(),但B在轉換期間閃爍。我寧願讓C滑下來,A出現。 編輯:看起來只是一個錯誤,因爲iOS 8 :( – dfickling 2014-10-30 00:04:48

1

對於iOS 6+- presentViewController:animated:completion:

[[[self presentingViewController] presentingViewController] dismissViewControllerAnimated:YES completion:nil]; 
1
在雨燕2.1

你可以嘗試

self.presentingViewController?.presentingViewController?.dismissViewControllerAnimated(true, completion: nil) 

作品對我來說

查看A - >視圖B - >視圖C

在視圖C中應用此代碼,您將着陸到視圖A.

0

蘋果文件約dismiss(animated:completion:)方法。

在第Discussion,它表示:

any intermediate view controllers are simply removed from the stack. 

如果連續你本幾個視圖控制器,從而建立呈現視圖控制器的堆疊,調用一個視圖控制器在此方法下在堆疊駁回它的直接子視圖控制器和堆棧上的那個子視圖上的所有視圖控制器。當發生這種情況時,只有最頂級的觀點纔會以動畫形式被解僱; 任何中間視圖控制器都從堆棧中簡單地移除。最頂部視圖是使用其模態過渡樣式,其可以從由其它視圖控制器在堆棧使用較低的樣式不同駁回。

換言之,如果象以下

Root -> A -> B -> C -> D ... -> Z 

D呼叫dismiss方法中,所有視圖控制器behide D,前視圖控制器堆棧:(E ... Z),將從棧中移除。

相關問題