Как изменить 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;

}

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


person Chatar Veer Suthar    schedule 01.07.2013    source источник


Ответы (3)


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

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

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

person Renderhp    schedule 01.07.2013
comment
Уважаемый, я уже пробовал это, он выводит меня на экран главного окна, но, дорогой, я уже нажал и переместил два контроллера внутри, чем основной контроллер, так? - person Chatar Veer Suthar; 01.07.2013
comment
ну, вы можете получить доступ к стеку контроллеров в вашем контроллере навигации, используя <yourController>.navigationController.viewControllers. Он возвращает NSArray. И попробуйте заменить первый контроллер в этом массиве новым. - person Renderhp; 01.07.2013
comment
Не совсем так, но ваш способ очень помог мне решить мою проблему. Спасибо @renderhp - person Chatar Veer Suthar; 03.07.2013
comment
Уважаемый, Вы можете помочь мне с этим stackoverflow.com/questions/ 17960034 / - person YasBES; 31.07.2013
comment
@Renderhp: я меняю свой rootViewcontroller по вашей идее, но в newrootview я не могу выполнить никаких действий. Помогите, пожалуйста. - person TamilKing; 28.10.2013
comment
Новичкам не забывайте использовать [app.window makeKeyAndVisivle] после смены корневого контроллера. - person Azri Jamil; 02.11.2014

С помощью Раскадровки

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

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

Внутри AppDelegate:

self.window.rootViewController = [self.window.rootViewController.storyboard instantiateViewControllerWithIdentifier:@"**STORYBOARD ID**"];
person Anton Gaenko    schedule 21.08.2014

Обмен знаниями с помощью 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.

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

person Arvind    schedule 13.10.2015