0

如果用户由于某种原因退出应用程序,我正在构建具有不同状态的应用程序,这些状态需要恢复。这意味着,当应用程序启动时,不同的屏幕/视图控制器需要位于导航堆栈之上。为了达到这个目的,我试图以编程方式构建视图控制器,如下所示:尽管viewDidLoad被调用,但是iOS ViewController并未出现

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

我使用正确设置了ID-s的stroyboard。那么在CSAppStateIdle中它可以工作,但是在CSAppStateSomeState中someView并没有出现在屏幕上,但在某些VC viewDidLoad中,viewWillAppear甚至viewDidAppear被调用。

有没有人遇到过这个,或知道解决方案?我感谢任何帮助,谢谢!

+0

什么是你想实现与'addChildViewController'方法调用? – pbasdf 2014-12-19 11:19:32

+0

我试图建立一个导航堆栈,所以当用户从SomeView推“Back”按钮并调用popViewController时,mainView就会出现。 – UNIQL 2014-12-19 11:33:55

回答

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 2014-12-19 11:54:35

+0

'navigationBarHidden'设置为true? – pbasdf 2014-12-19 12:10:27

+0

嗯,我把它设置在rootVC的viewDidLoad中,并希望它没问题,但在我看来,我需要在每个VC的viewDidLoad中设置它。你对这个案子有什么建议吗?感谢您的帮助! – UNIQL 2014-12-19 12:16:52

相关问题