如何强制应用程序在根故事板上打开?

时间:2012-02-23 02:18:54

标签: objective-c storyboard

每次启动应用程序时,如何强制应用程序在我的登录屏幕(rootViewController)上启动? 目前它打开了我留下的任何一个视图控制器,我认为这是意味着发生的事情。

P.S。对于stackoverflow和iOS开发感到遗憾

4 个答案:

答案 0 :(得分:4)

由于您使用的是故事板,因此可以使用展开segues:

  1. 在根视图控制器中创建一个展开IBAction方法,如下所示:

    - (IBAction)unwindToLogin:(UIStoryboardSegue *)segue
    {
        // Do something after unwinding
    }
    

    请记住在根视图控制器类的头文件中声明该方法,以便IB可以找到它。

    - (IBAction)unwindToLogin:(UIStoryboardSegue *)segue;
    
  2. 对于通过segues(直接或间接)连接到根视图控制器场景的所有故事板场景,请执行以下操作:

    • 使用storyboard的文档大纲将视图控制器连接到“Exit”segue,方法是按住ctrl键,单击视图控制器并拖放绿色的“Exit”segue占位符。出现提示时选择“unwindToLogin:”选择器。

      Connecting unwind segue

    • 设置手动展开segue(刚刚创建)的标识符:

      Select the new unwind segue

      Set identifier of unwind segue

    • 在该场景的视图控制器中,监听“应用程序确实变为活动状态”通知(每当应用程序进入前台时都会发布),如下所示:

      - (void)viewWillAppear:(BOOL)animated
      {
          [super viewWillAppear:animated];
      
          // Do other viewWillAppear stuff...
      
          [[NSNotificationCenter defaultCenter] addObserver:self
                                                   selector:@selector(applicationDidBecomeActive)
                                                       name:UIApplicationDidBecomeActiveNotification object:nil];
      }
      

      收到通知后,执行展开segue(有效地再次向用户显示登录屏幕):

      - (void)applicationDidBecomeActive
      {
          //Perform unwind segue
          [self performSegueWithIdentifier:@"unwind" sender:self];
      }
      

      当我们不再是呈现视图控制器时,请记住删除观察结果:

      - (void)viewWillDisappear:(BOOL)animated
      {
          [[NSNotificationCenter defaultCenter] removeObserver:self
                                                          name:UIApplicationDidBecomeActiveNotification
                                                        object:nil];
      
          // Do other viewWillDisappear stuff...
      
          [super viewWillDisappear:animated];
      }
      
  3. 就是这样。现在,只要用户打开应用程序,当前显示的视图控制器将被解除,并且将再次显示根视图控制器(在这种情况下是登录视图控制器)。

    如果您不想将segue一直放回到根视图控制器(有效地将用户注销),您可以通过在当前呈现的控制器之上呈现模态登录视图控制器来保留当前状态收到通知时为此,请将applicationDidBecomeActive方法替换为:

    - (void)applicationDidBecomeActive
    {
        // Where "LoginViewController" is your UIViewController that manages your user login.
        LoginViewController *loginViewController = [[LoginViewController alloc] init];
        [self presentViewController:loginViewController animated:YES completion:nil];
    }
    

    请注意,上述解决方案假定使用ARC和iOS6.x

答案 1 :(得分:1)

简单在AppDelegate的applicationDidBecomeActive中写一下

UINavigationController *nav = (UINavigationController *)self.window.rootViewController;
[nav popToRootViewControllerAnimated:YES];

答案 2 :(得分:0)

确保选择了故事板中的视图控制器并选择“是初始视图控制器”:

enter image description here

答案 3 :(得分:0)

  

目前,无论我在哪个视图控制器上打开它都会打开

似乎您希望在最小化后看到您的控制器并恢复您的应用程序,而不是在第一次加载后。我理解正确吗? 在这种情况下,您描述的行为是正常的。