2013-07-01 5 views
12

Это сделаноFinishLaunchingWithOptions Method в AppDelegate. Пояснит сценарий, я разработал sideMenu как Facebook в моем приложении, но теперь я должен изменить список sideMenu в соответствии с экранами (ViewController)Как изменить RootViewController в AppDelegate из другого ViewController?

Здесь сторона меню является SideMenuViewController, что является аргументом в содержит, которые в конечном итоге становится rootViewController окна.

SO, возникает очень простой вопрос «Как изменить контроллер или переменную, которая становится RootViewController окон»

- (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; 

} 

Если любой программист хочет знать больше кода или требование, я предлагается представить на редактирование моего кода или комментариев.

ответ

13

Попробуйте это:

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

Не забудьте включить необходимые заголовки (ваш AppDelegate, к примеру), или вы получите CE. Это один, кажется, работает: enter image description here

+0

Дорогой, я уже пробовал это, он приносит мне на главный экран, но, дорогой, я уже нажал и переместил два контроллера внутри основного контроллера, так? –

+0

ну, вы можете получить доступ к стеку контроллеров в вашем контроллере навигации, используя ' .navigationController.viewControllers'. Он возвращает NSArray. И попробуйте заменить первый контроллер в этом массиве на новый. – Renderhp

+0

Не совсем, но ваш способ помог мне решить мою проблему. Спасибо @renderhp –

13

С раскадровку

Внутри другой ViewController вы можете использовать этот код:

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

Внутри AppDelegate:

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

Обмен знаниями Использование Swift:

Изменение вида корневой контроллер из класса, кроме приложения 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 

Изменение RootViewController С Animation можно достичь с помощью:

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

Мы можем написать метод обобщения слишком похож на this.

Надеюсь, это поможет кому-то.

Смежные вопросы