Как изменить 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. Это, кажется, работает:
С раскадровка
внутри 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)
мы можем написать обобщающий метод, слишком похожий на этой.
надеюсь, что это будет полезно для кого-то.