2011-05-09 78 views
3

我從另一個modalviewcontroller提出一個modalviewcontroller。當我解僱第二個modalviewcontroller時,第一個和第二個modalviewcontroller都應該被解僱。我試圖訪問第一個模態視圖,如解除modalviewcontroller從另一個modalviewcontroller

[self.view.superview dismissmodalviewcontroller]; 

但它顯示錯誤。從第二個modalViewController獲取ref並從中調用dismiss方法的正確方法是什麼?

+0

問了25個問題已經我覺得你應該學會如何在計算器上正確的格式化後。如果你格式化你的問題,以便更容易閱讀,人們更傾向於閱讀和回答它。 – DarkDust 2011-05-09 10:22:39

+0

當你寫問題時,使用鼠標選擇整個代碼部分,然後點擊頂部的「{}」按鈕。這是格式代碼的方式。 – Krishnabhadra 2011-05-09 11:02:38

+0

謝謝你將來會繼續... btw我仍然卡住。在那裏請幫助。 – sujith1406 2011-05-09 11:08:01

回答

10

就這樣。

A給出B.在此,A是B的父(這裏,A.modalViewController將B和B.parentViewController將A)

和B給出C.這裏,B是C的父(這裏,B.modalViewController將C和C.parentViewController將B)

根據蘋果的指導方針,其父控制器責任解僱其子控制器。

所以,如果你想解僱控制器C,你可以在C.parentViewController調用dismissModalViewController。由於C的父母是B,因此B將解僱其呈現的模式(子)控制器。

但你想甚至解僱B.它的責任B的父母解僱B.所以你需要說[B.parentViewController dismissModalViewControllerAnimated:YES];

因此,您需要從C獲得B作爲C.parentViewController(不要忘記在此處指定類型轉換)。然後你說[B.parentViewController dismissModalViewControllerAnimated:YES];

+0

非常感謝...你救了我的一天! – sujith1406 2011-05-09 12:46:01

2

嘗試[self.parentViewController dismissModalViewControllerAnimated:YES];

這將消除這兩個模態的視圖控制器

+0

我試過這種方式。但這似乎並沒有工作。這是views.tableviewcontroller-> modalviewcontroller-> modalviewcontroller的層次結構 – sujith1406 2011-05-09 10:33:15

2

dismissModalViewControllerAnimated:方法是UIViewController類的一部分,而不是UIView的。所以,你需要做的

[self.parentViewController dismissModalViewControllerAnimated:YES]; 

與其說這是對self.view.superview的。

+0

這不是工作試圖這樣做,但只有一個視圖被駁回。第一個模態視圖不會有任何其他方式來做到這一點? – sujith1406 2011-05-09 11:24:33

+0

@ sujith1406:所以你應該有'[self dismissModelViewControllerAnimated:YES];'已經。嘗試用'[self.parentViewController dismissModalViewControllerAnimated:YES]替換它;'而不是。從鏈接的文檔:*如果您連續呈現幾個模式視圖控制器,並因此構建一堆模式視圖控制器,則在視圖控制器上的較低位置調用此方法將取消其直接子視圖控制器以及該子視圖上方的所有視圖控制器在堆棧上。*。 – DarkDust 2011-05-09 11:30:00

+0

對不起,再次麻煩你,當我得到你的回答我第一次更換[self dismissModelViewControllerAnimated:YES];與[self.parentViewController dismissModelViewControllerAnimated:YES];但在這兩種情況下,只有第二種模態觀點被駁回。 – sujith1406 2011-05-09 11:36:53

2

爲了進一步澄清,你可能會需要的是這樣的:

[self.parentViewController.parentViewController dismissModalViewControllerAnimated:YES]; 
1

我只是發現它的答案,可能會幫助別人 我們需要的代碼只是一行

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

不幸的是它的視圖總是彈到堆棧中的第一個模態,然後執行動畫。

我用自定義動畫固定它:

 let transition: CATransition = CATransition() 
     transition.duration = 0.5 
     transition.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut) 
     transition.type = kCATransitionReveal 
     transition.subtype = kCATransitionFromBottom 
     self.view.window!.layer.add(transition, forKey: nil) 
     self.presentingViewController?.presentingViewController?.dismiss(animated: false, completion: nil)