0

Я создаю приложение с разными состояниями, которое необходимо восстановить, если пользователь почему-то ушел из приложения. Это означает, что при запуске приложения разные экраны/диспетчер просмотра должны находиться поверх стека навигации. Для достижения этой цели, я пытался построить viewcontrollers программно, смотрите ниже:iOS ViewController не появляется, хотя viewDidLoad вызывается

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
     switch (appState) 
     { 
      case CSAppStateIdle: 
      { 
       //replace and push rootview manually 
       MainVC* mainView = [storyboard instantiateViewControllerWithIdentifier:@"MainVC"]; 
       [(UINavigationController *)self.window.rootViewController pushViewController:mainView animated:YES]; 
      } 
       break; 
      case CSAppStateSomeState: 
      { 
       MainVC* mainView = [storyboard instantiateViewControllerWithIdentifier:@"MainVC"]; 
       SomeVC* someView = [storyboard instantiateViewControllerWithIdentifier:@"SomeVC"]; 
       [(UINavigationController *)self.window.rootViewController addChildViewController:mainView]; 
       [(UINavigationController *)self.window.rootViewController pushViewController:someView animated:YES]; 
      } 
       break; 

      default: 
       break; 
     } 

Я использую stroyboards с ID-S установлен правильно. Ну в CSAppStateIdle это работает, но в CSAppStateSomeState someView не появляется на экране, но в someVC viewDidLoad вызывается viewWillAppear и даже viewDidAppear.

Неужели кто-нибудь сталкивался с этим раньше или знает решение? Я ценю любую помощь, спасибо!

+0

Что вы пытаетесь достичь с помощью вызова метода 'addChildViewController'? – pbasdf

+0

Я попытался создать навигационный стек, поэтому, когда пользователь нажимает кнопку «Назад» из someView и вызывается popViewController, появляется mainView. – UNIQL

ответ

0

Чтобы поставить обе позиции на навигационном стека, используйте метод setViewControllers:animated:, передавая массив с обоих пунктов:

 case CSAppStateSomeState: 
     { 
      MainVC* mainView = [storyboard instantiateViewControllerWithIdentifier:@"MainVC"]; 
      SomeVC* someView = [storyboard instantiateViewControllerWithIdentifier:@"SomeVC"]; 
      [(UINavigationController *)self.window.rootViewController setViewControllers:@[mainView, someView] animated:YES]; 
     } 
+0

Это решение работает, но навигационная панель исчезает с VC-s, пока не знаю почему. – UNIQL

+0

Установлен ли 'navigationBarHidden' в true? – pbasdf

+0

Ну, я установил его в viewDidLoad от rootVC и надеялся, что все в порядке, но мне кажется, что мне нужно установить его в каждом представлении VC ViewDidLoad. Есть ли у вас какие-либо предложения по этому делу? Спасибо за помощь, хотя! – UNIQL