2012-02-23 72 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];