簡體   English   中英

所有呈現的視圖控制器都不會被解雇

[英]All the presented view controllers are not dismissed

我有一個顯示的firstViewController

[self.navigationController pushViewController:firstViewController animated:true];

然后當點擊第一個VC中的按鈕時,我會出現第二個:

[self presentViewController:secondViewController animated:true completion:nil];

從第二個開始,我將第三個VC作為一個模態:

[thirdVC modalPresentationStyle];
[thirdVC setModalPresentationStyle:UIModalPresentationOverCurrentContext];    
[self presentViewController:thirdVC animated:true completion:nil];

問題是我想在單擊最后一個VC的驗證按鈕時顯示firstVC。 所以我不得不解雇第三個和第二個。 我在validateAction嘗試了這個(在第三個VC中):

[[self parentViewController] dismissViewControllerAnimated:true completion:nil];
[self dismissViewControllerAnimated:true completion:nil];

但結果是第三個VC(模態一個)被解除了,從調試器我可以看到第一個VC被第二個VC覆蓋。

如何同時解除第二個和第三個VC才能返回第一個VC? 注意:我想在解除其他人之后推送第一個VC,因為我必須重新加載數據(在fristVC viewDidLoad中)

來自Apple的文檔

呈現視圖控制器負責解除它所呈現的視圖控制器。 如果在呈現的視圖控制器本身上調用此方法,UIKit會要求呈現視圖控制器處理解雇。

換句話說,第三個viewController要求第二個viewController關閉它呈現的viewController,這是第三個。 然后第三個viewController嘗試解散自己,導致UIKit再次請求第二個viewController解除第三個。

你將不得不去一層並要求第一個viewController解雇它呈現的視圖控制器。

優秀的做法是第三個viewController對表示層次結構一無所知。 您可以使用委托告訴第一個viewController任務已完成。 如果您使用故事板,退出segue是一個非常好的選擇。

你只需要調用-dismissViewControllerAnimated:completion:如果你解決了第一個viewController:

如果連續呈現多個視圖控制器,從而構建一堆呈現的視圖控制器,則在堆棧中較低的視圖控制器上調用此方法會解除其直接子視圖控制器以及堆棧上該子視圖上方的所有視圖控制器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM