簡體   English   中英

解雇ViewController時ViewWillAppear和ViewDidAppear觸發

[英]ViewWillAppear & ViewDidAppear firing when dismissing ViewController

我正在制作一個iOS應用程序,我想要呈現這樣的頁面流:

基本上我想實現的是擁有這個頁面流:

PageA
PageB
PageC
PageD, dismiss back to:
PageC
PageD
PageE, dismiss back to:
PageA (starting point, start over again)

我正在使用ShowViewcontroller來呈現頁面(模態)和DismissViewcontroller來解除。

根據Apple的文檔,如果我在堆棧的早期解雇VC,所有后續的UIViewCOntroller被解雇( Apple doc )。

不過,我體驗到ViewWillAppearViewDidAppear對被解雇UIViewController ,即使他們不出現被解雇(例如,在例如解雇回當PageAPageE然后ViewWillAppear被稱為上PageDPageCPageB太)。

這對我來說似乎不合邏輯。 任何人都可以解釋為什么會這樣嗎? 如果我接近錯誤的方式,也許糾正我。

我正在使用Xamarin.iOS。

Apple doc:如果連續呈現多個視圖控制器,從而構建一堆呈現的視圖控制器,則在堆棧中較低的視圖控制器上調用此方法會解除其直接子視圖控制器和堆棧上該子視圖上方的所有視圖控制器。 發生這種情況時,只有最頂層的視圖以動畫方式被刪除; 任何中間視圖控制器都可以從堆棧中刪除。 最頂層的視圖使用其模態過渡樣式被忽略,這可能與堆棧中較低的其他視圖控制器使用的樣式不同。

ViewControllers使用堆棧。 每當將新的ViewController(任何類型)添加到堆棧中時,您將失去對ViewControllers的越來越多的控制(特別是在為ViewControllers使用模態時)。 所以,假設您的堆棧中有5個ViewControllers(A,B,C,D,E,根據您的示例),並假設它們是按照所述順序創建的,以便從ViewController E返回到ViewController A,我必須經歷整個堆棧。 這意味着你的方式中的每個ViewController都需要首先顯示,以便解除(因為你已經顯示了ViewController E,這里不會發生這種情況)。

我希望這可以幫助你。 祝好運!

愛和問候,Björn

暫無
暫無

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

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