2012-03-28 1 views
2

私はプロジェクトにnavigationControllerを持っていても私のプロジェクト全体がpresentViewControllersに基づいていて、複数のレベルにナビゲートしているシナリオがあると私はpopToRootViewControllerを使うことができます。レベルが1つしかない場合は、現在のView Controllerを終了してルートビューコントローラに戻ることができますが、複数のレベルになったときにルートビューコントローラに戻る方法を知ることはできません。誰かアドバイスをお願いしますか?iOS:presentViewControllerアーキテクチャのpopToRootViewController

私は次のコードを使用しようとしましたが、私のアプリケーションがクラッシュしました!

- (IBAction)mainMenuButtonPressed:(id)sender { 
    MyAppDelegate *delegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate]; 
    [self presentModalViewController:delegate.window.rootViewController animated:YES]; 
} 

ありがとう。

答えて

4

私はあなたのことを理解していれば、いくつかのモーダルビューコントローラを提示していて、ルートビューコントローラに戻ろうとしています。そうです場合は、次のコードでは、あなたのために働く必要があります。

- (IBAction)mainMenuButtonPressed:(id)sender { 
    MyAppDelegate *delegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate]; 
    [delegate.window.rootViewController dismissModalViewControllerAnimated:YES]; 
} 
+0

をあなたは正しいです!それは素晴らしいことです!それはうまくいったが、トップにないときにrootviewcontrollerが却下されたのはなぜだろうか? – applefreak

+0

これは、root viewcontrollerによって提示されているviewcontrollerを却下するとすぐに、このViewControllerが提示しているすべてのモーダルView Controllerを自動的に消滅させるためです。基本的にこれは私が推測する単なる再帰呼び出しです。 – Lukas

+0

面白いですが、コントローラが却下されるような気がしません!それは直接私はrootviewcontrollerになっている! – applefreak

0

スウィフトバージョン

var = APP_DELEGATE = UIApplication.sharedApplication().delegate as! AppDelegate 
APP_DELEGATE.window?.rootViewController?.dismissViewControllerAnimated(true, completion: nil) 

Swift3

let APP_DELEGATE = UIApplication.shared.delegate as! AppDelegate 
      APP_DELEGATE.window?.rootViewController?.dismiss(animated: true, completion: nil) 
関連する問題