2016-01-20 64 views
1

讓我首先說我想在沒有故事板的情況下完成所有這些。我的情況如下:我有一個用戶登錄頁面。在登錄頁面上,用戶可以登錄,或者進入註冊頁面。當用戶註冊成功時,它們被帶到主菜單。但是,如果我他們從主菜單上單擊註銷,則關閉主菜單視圖控制器會將我帶回註冊頁面(這很有意義)。在UIViewControllers之間導航時遇到問題

問題是我需要把用戶帶到登錄頁面。但是,我無法顯示原始登錄頁面,因爲我收到錯誤「警告:嘗試呈現已經呈現」

有沒有某種方式讓我解僱2個視圖控制器?或者,如果它是從某個視圖控制器提供的,可以在視圖控制器上運行一行代碼?

謝謝!

這是我從主菜單中使用的解決方案,它的工作

if(self.presentingViewController == registerPage){ 
      registerPage.dismissViewControllerAnimated(true, completion: nil) 
    } 
     self.dismissViewControllerAnimated(true, completion: nil) 
+0

你可以做的一種方法:將所有viewControllers放入navigationViewController,然後使用navigationViewController.viewControllers和navigationViewController.popToViewController()來管理你的堆棧:) – Breek

+0

@Breek我能否彈出兩個控制器?因爲我基本上需要做的是備份2,而不僅僅是1. – DMop

+0

是的,如果你能夠訪問你的loginViewController實例,那麼你可以做navigationViewController.popToViewController(loginViewController,animated:true)。否則,您可以在您的navigationViewController.viewControllers中迭代以獲取您的loginViewController – Breek

回答

1

無需切換到導航控制器。

如果你是不是呈現視圖控制器只是試試這個:

對於Objective-C的:

[[[self presentingViewController] presentingViewController] dismissViewControllerAnimated:YES completion:nil]; 

對於斯威夫特:

self.presentingViewController!.presentingViewController!.dismissViewControllerAnimated(true, completion: {}) 

希望它會爲工作您。

+0

這似乎是在objective-c中。你知道速度相當嗎? – DMop

+0

@DMop剛剛編輯的答案,你可以在那裏看到很快 – Mayur

+0

這看起來不錯!非常感謝! – DMop

2

如果您使用的是導航控制器,你可以得到viewControllers數組屬性,建立一個新的陣列,而不viewControllers你想消除和設置屬性與新陣列。

+0

我現在擁有的所有控制器都是ViewControllers。切換到導航控制器是否有意義? – DMop

+0

導航控制器適用於您想前後導航的一堆屏幕。一旦用戶登錄,我只需將window.rootViewController重置爲mainVC。當他們註銷時,我會將root重置爲loginVC。如果你需要一個堆棧,Main或Login可能會在NavVC中,但我認爲login和main應該不在同一個NavVC中。 –

+0

這很有道理。重置rootViewController是否會改變堆棧本身? – DMop

相關問題