Как изменить RootViewController в AppDelegate из другого ViewController?

Это метод didFinishLaunchingWithOptions в AppDelegate. Позвольте мне объяснить сценарий, я разработал sideMenu как facebook в своем приложении, но теперь мне нужно изменить список sideMenu в соответствии с экранами (ViewController)

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

SO, Самый основной вопрос: "Как изменить контроллер или переменную, которая становится rootViewController of windows"

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

}

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

Ответ 1

Попробуйте следующее:

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

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

Ответ 2

С Раскадкой

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

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

Внутри AppDelegate:

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

Ответ 3

Обмен знаниями с помощью 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 С анимацией можно добиться:

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

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

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