2012-03-28 8 views
2

Ich weiß, dass ich PopToRootViewController verwenden kann, wenn ich NavigationController in meinem Projekt habe, aber mein ganzes Projekt basiert auf PresentViewControllers und es gibt ein Szenario, in dem ich zu mehreren Ebenen navigiere. Wenn es nur eine Ebene gibt, kann ich zum Root-View-Controller zurückkehren, indem ich den aktuellen View-Controller verwarne, aber ich bin nicht in der Lage herauszufinden, wie ich zum Root-View-Controller zurück navigiere, wenn ich mehr als eine Ebene betreue. Könnte mir bitte jemand hier raten?iOS: popToRootViewController für presentViewControllers Architektur

Ich habe versucht, folgenden Code zu verwenden, aber meine App stürzt ab!

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

Danke.

Antwort

4

Wenn ich Sie richtig verstanden habe, dann präsentieren Sie mehrere modale Viewcontrollers und wollen zurück zum root viewcontroller. Wenn das stimmt, dann sollten Sie den folgenden Code für Sie arbeiten:

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

Sie haben Recht! Das ist großartig! Es hat funktioniert, aber ich frage mich, wie es funktioniert hat, rootviewcontroller zu kündigen, wenn es nicht ganz oben ist? – applefreak

+0

Das ist, weil, sobald Sie den Viewcontroller, der von der Root-Viewcontroller präsentiert wird, entlassen wird automatisch alle Modal-View-Controller, die diese präsentiert und so weiter entlassen. Im Grunde ist das nur ein rekursiver Aufruf, denke ich. – Lukas

+0

Interessant, aber ich fühle mich nicht wie irgendwelche Controller entlassen werden! Es geht direkt zum rootviewcontroller! – applefreak

0

Swift Version

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) 
Verwandte Themen