2013-07-01 18 views
12

To jest metoda didFinishLaunchingWithOptions w AppDelegate. Pozwól mi wyjaśnić scenariusz, opracowałem sideMenu jak Facebook w mojej aplikacji, ale teraz muszę zmienić listę sideMenu według ekranów (ViewController)Jak zmienić RootViewController w AppDelegate z innych ViewController?

Tutaj menu boczne to SideMenuViewController, który jest argumentem w zawierać, który ostatecznie staje się rootViewController okna.

SO Powstaje bardzo podstawowe pytanie „Jak zmienić kontroler lub zmienną, która staje rootViewController okien”

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 

SideMenuViewController *leftMenuViewController = [[SideMenuViewController alloc] init]; 

self.container = [ContainerOfSideMenuByVeerViewController 
        containerWithCenterViewController:[self navigationController] 
        leftMenuViewController:leftMenuViewController]; 

self.window.rootViewController = self.container; 

[self.window makeKeyAndVisible]; 

return YES; 

} 

Jeżeli którykolwiek programista chce wiedzieć więcej kodu lub wymóg, robię powitanie dostarczenie przez edytowanie mojego kodu lub w komentarzach.

Odpowiedz

13

Spróbuj tego:

<YourAppDelegateClass> *app = [[UIApplication sharedApplication] delegate]; 
app.window.rootViewController = <YourRootViewController>; 

Nie zapomnij podać niezbędne nagłówki (swoją AppDelegate, na przykład) lub dostaniesz CE. Ten wydaje się działać: enter image description here

+0

Drogi, już to wypróbowałem, to przynosi mi ekran główny okna, ale kochanie, że już popchnąłem i nawigowałem dwa kontrolery wewnątrz niż główny kontroler, więc? –

+0

cóż, możesz uzyskać dostęp do stosu kontrolerów w kontrolerze nawigacyjnym za pomocą ' .navigationController.viewControllers'. Zwraca NSArray. I spróbuj zamienić pierwszy kontroler w tej tablicy na nowy. – Renderhp

+0

Niezupełnie, ale twoja droga bardzo mi pomogła rozwiązać mój problem. Dzięki @renderhp –

13

Z Storyboard

wewnątrz innego ViewController można użyć tego kodu:

self.view.window.rootViewController = [self.view.window.rootViewController.storyboard instantiateViewControllerWithIdentifier:@"**STORYBOARD ID**"]; 

Inside AppDelegate:

self.window.rootViewController = [self.window.rootViewController.storyboard instantiateViewControllerWithIdentifier:@"**STORYBOARD ID**"]; 
8

Udostępnianie wiedzy Korzystanie SWIFT:

Zmiana widoku głównego kontrolera z klasy innej niż app delegate.swift

let appdelegate = UIApplication.sharedApplication().delegate as! AppDelegate 
let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) 
var homeViewController = mainStoryboard.instantiateViewControllerWithIdentifier("HomeViewController") as! HomeViewController 
let nav = UINavigationController(rootViewController: homeViewController) 
appdelegate.window!.rootViewController = nav 

Zmiana rootviewcontroller z animacją można osiągnąć poprzez:

UIView.transitionWithView(self.window!, duration: 0.5, options: UIViewAnimationOptions.TransitionFlipFromLeft, animations: { 
     self.window?.rootViewController = anyViewController 
}, completion: nil) 

możemy napisać uogólnij metodę zbyt podobną do this.

Mam nadzieję, że będzie to pomocne dla kogoś.

Powiązane problemy