[英]How to dismiss middle viewControllers and come back to rootViewController
[英]How to come back to the rootviewcontroller
我有四個視圖控制器A,B,C和D
我從A到B再到C到D
let newViewContoller: B = self.storyboard?.instantiateViewControllerWithIdentifier("B") as! B
self.presentViewController(newViewContoller, animated: true, completion:nil)
從D回到A
我正在使用以下
self.view.window!.rootViewController?.dismissViewControllerAnimated(true, completion: nil)
我面臨的問題是,viewController B和viewController C的viewDidAppear
被調用。
我不知道為什么會這樣? 回到初始UIViewController
的正確方法是什么。
您的ViewController A,B,C和D在堆棧數據結構中,該結構實現后進先出。 這意味着要通過關閉ViewController進入ViewController A,將按此順序彈出ViewController D,C,B。 在這種情況下,從堆棧中彈出的ViewControllers C和B將成為一秒鍾內最靠前的ViewController,這將觸發viewWillAppear()和viewWillDissapear()函數。 蘋果文檔:
在堆棧下部的視圖控制器上調用此方法將取消其直接子視圖控制器以及該堆棧上該子視圖之上的所有視圖控制器。
相反,如果您有導航控制器並且不希望出現C和B,則應該從當前顯示的viewController(D)中彈出popToRootViewController(),這將彈出當前的內容,然后取消分配C和B,然后顯示A 。
據我所知,不可能一次解散4個控制器,但是有一個棘手的方法-
創建視圖控制器d一個順着接下去的viewController A,稱之為ForceSegue
,那么你應該有東西在控制器上執行此操作,如果它是一個動作粘貼以下.. Objective-C的
[self performSegueWithIdentifier:@"ForceSegue" sender:self];
迅捷3
performSegue(withIdentifier: "ForceSegue", sender: self)
只是一個棘手的方法,希望對您有所幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.