2012-02-23 49 views

回答

4

由于您使用的故事板,你可以使用开卷塞格斯:

  1. 在你的根视图控制器,像这样创建一个展开IBAction为方法:

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

    记住申报方法在根视图控制器类的头文件,以便IB可以找到它。

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

    • 使用故事板的文档大纲视图控制器连接到通过按住ctrl键,单击视图控制器并拖放绿色的“退出”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]; 
      } 
      

钍在它的。现在,无论何时用户打开应用程序,当前呈现的视图控制器都将被取消,并且将再次呈现根视图控制器(在本例中为登录视图控制器)。

如果您不希望一直退回到根视图控制器(有效地记录用户),可以通过在当前呈现的顶部呈现模态登录视图控制器来保留当前状态控制器收到通知时。要做到这一点,则更换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

+0

谢谢,这正是我一直在寻找的:) – 2013-03-18 21:26:05

+0

没问题。最后一个想法......您可能希望在收到“UIApplicationDidEnterBackgroundNotification”而不是“UIApplicationDidBecomeActiveNotification”后放松身心。这样,当用户重新打开应用程序时,他们没有机会在视线之前快速看到视图变化。 – gavdotnet 2013-03-19 19:16:18

+0

是的,这个效果很好,但是如果我们有一个模式呈现,那么他们仍然附加在屏幕上,他们应该手动解雇。 – Slavcho 2014-10-08 12:16:15

0

确保在故事板视图控制器被选中,然后选择“是初始视图控制器”:

enter image description here

+0

哦我的意思是更像一个登录屏幕或加载屏幕。每当我打开应用程序弹出一些东西 – 2012-02-24 02:22:15

+0

[self.window.rootViewController presentModalViewController:yourloginController animated:YES]; – 2012-02-24 05:55:11

+0

好的,谢谢,我会尽力 – 2012-02-25 08:16:54

0

目前,它会打开在我离开的任何视图控制器它在

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

1

简单的在AppDelegate中的applicationDidBecomeActive只写

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