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

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

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

итак, возникает самый основной вопрос: "Как изменить контроллер или переменную, которая становится 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;

}

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

3 ответов


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

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

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


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

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

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

внутри AppDelegate:

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

Обмен Знаниями С Помощью Swift:

изменение контроллера корневого представления из класса, отличного от делегата приложения.Свифт!--5-->

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)

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

надеюсь, что это будет полезно для кого-то.