0

我正在使用SWRevealViewController構建滑動菜單。在訪問菜單之前,會顯示登錄視圖以允許用戶登錄。現在我想讓用戶斷開並再次顯示登錄視圖。我的問題是如何彈出SWRevealViewController。Pop SWRevealViewController

代碼,提供登錄後訪問應用程序是:

MainViewController *vMainMenu = [[MainViewController alloc] initWithNibName:@"MainViewController" bundle:nil]; 
    vMainMenu.strURL = URL; 
    LeftMenu *vLeftMenu = [[LeftMenu alloc] initWithNibName:@"LeftMenu" bundle:nil]; 

    UINavigationController *principalNavController = [[UINavigationController alloc] initWithRootViewController:vMainMenu]; 
    UINavigationController *rearNavController = [[UINavigationController alloc] initWithRootViewController:vLeftMenu]; 

    SWRevealViewController *mainRevealController = [[SWRevealViewController alloc] initWithRearViewController:rearNavController frontViewController:principalNavController]; 

    mainRevealController.delegate = self; 

    self.viewController = mainRevealController; 

    principalNavController.navigationBar.hidden = YES; 
    rearNavController.navigationBar.hidden = YES; 

    self.window.rootViewController = self.viewController; 

該解決方案是行不通的:

[self.revealViewController.navigationController popViewControllerAnimated:YES]; 
Splash *vSplash = [[Splash alloc] initWithNibName:@"Splash" bundle:nil]; 
[self.navigationController pushViewController:vSplash animated:YES]; 

你能幫我請

謝謝。

+0

您的問題是否解決? – ichanduu

+0

是的,我做到了。但它不是最好的解決方案,我禁用了panGestureRecognizer和tapGestureRecognizer,然後我推了splashScreen: [self.revealViewController.navigationController popViewControllerAnimated:YES]; [revealController panGestureRecognizer] .enabled = NO; [revealController tapGestureRecognizer] .enabled = NO; –

+0

我試着彈出它,它顯示的是一個空白的屏幕。無論如何,我會嘗試你的解決方案。謝謝。 – ichanduu

回答

0

你不能通過pop回到你的LoginViewController。您可以添加PresentViewController而不使用動畫來執行此操作。

Splash *vSplash = [[Splash alloc] initWithNibName:@"Splash" bundle:nil]; 
[self presentViewController: vSplash animated:NO completion:nil]; 
0

我有同樣的問題。我已經實施了幾個故事板。

 let storyboard = UIStoryboard(name: "Login", bundle: nil) 
     let startcontroller = storyboard.instantiateViewControllerWithIdentifier("LoginVC") as UIViewController 
     window?.rootViewController = startcontroller 

有了這個片段,你可以訪問正確的視圖控制器。

0

您可以使用「展開塞恩」。展開的賽格就像一個常規賽,而不是前鋒。

首先,進入登錄視圖控制器,並添加下面的方法:

-(IBAction)unwindToLoginScreen:(UIStoryboardSegue *)segue { 
} 

的方法可能是空的,它可以有任何名稱;使用描述性名稱是很好的,因爲你的代碼可能有許多展開式的細節,並且能夠區分它們會很有用。

此展開方法將作爲一個全局常量,可供故事板上的所有視圖控制器顯示。

現在,在每個應該能夠返回到登錄屏幕的視圖控制器上,您將創建一個Unwind Segue。您可以在故事板上執行此操作:

  1. 選擇所需的視圖控制器;在頂部欄上,您應該看到三個按鈕,一個代表視圖控制器,另一個代表第一響應者,另一個代表退出。
  2. Ctrl +從View Controller按鈕拖動到Exit按鈕。將出現一個上下文菜單,並將列出您在故事板上創建的所有可見展開方法。
  3. 在文檔大綱中,視圖控制器將顯示「Unwind segue」。您可以爲該segue添加標識符(例如您的案例中的「登錄」)。然後你調用performSegueWithIdentifier。選擇您在登錄視圖控制器上創建的那個。

這樣做,視圖控制器和登錄視圖控制器之間的完整堆棧將展開。也就是說,堆疊在Login視圖控制器上方的所有視圖控制器都將被彈出。

你也可以使用prepareForSegue來解放塞格,就像你將它們用於常規塞格一樣。如果你想爲結果做一些事情,你可以在 - (IBAction)方法中添加代碼。