2017-04-18 80 views
0

我試圖從應用程序代理的didFinishLaunchingWithOptions更改根視圖控制器,具體取決於用戶是否登錄。一旦我得到過去的這個條件,我使用下面的代碼更改根視圖控制器:在AppDelegate中更改根視圖控制器時出現黑屏

self.window = UIWindow(frame: UIScreen.main.bounds) 
self.window?.rootViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "SWRevealViewController") as! SWRevealViewController 

self.window?.makeKeyAndVisible() 

然而,當我啓動應用程序(在用戶的有效記錄的)模擬器首先顯示登錄屏幕(舊的根視圖控制器)一秒鐘,然後屏幕變黑約30秒到一分鐘,然後才顯示出所需的視圖控制器。

在故事板視圖控制器結構如下:

SWRevealViewController - >導航控制器 - >期望的視圖控制器(新的根)

其原因開始與SWRevealViewController是因爲滑動菜單被否則會損失的。

任何想法可能會發生什麼?

+0

你可以在創建窗口鍵之前設置'rootViewController' *嗎? – NRitH

+0

@NRitH結果完全一樣。 – rodrigochousal

+0

你能展示一些更多的代碼嗎?看看你如何設置loginViewController以及觸發你顯示的代碼會很有用。 –

回答

0

下面是一個例子,它適用於我,只是使您的loginViewControllers成爲UINavigationController的堆棧,與SWRevealController無關。這很容易解決。

self.window = UIWindow(frame: UIScreen.main.bounds) 
if User.shared.firstLaunch { 
    let navigationVC = Storyboard.inital.instantiateViewController(withIdentifier: "firstLaunchNC") as! UINavigationController 
    self.window?.rootViewController = navigationVC 
} else if User.shared.token == "" { 
    let navigationVC = Storyboard.inital.instantiateViewController(withIdentifier: "initialVC") as! UINavigationController 
    self.window?.rootViewController = navigationVC 
} else { 
    self.registerForPushNotifications(application: UIApplication.shared) 
    User.shared.refreshToken() 
    let revealController = Storyboard.main.instantiateViewController(withIdentifier: "revealViewController") as! SWRevealViewController 
    self.window?.rootViewController = revealController 
} 

self.window?.makeKeyAndVisible() 
return true 
0

我找到了一種方法來產生與我想要的結果類似的結果。它包括不改變根視圖控制器所有,並讓它升空後提出了一個「人造根視圖控制器」:

if let currentRoot = self.window?.rootViewController { 
    let storyboard = UIStoryboard(name: "Main", bundle: nil) 
    let artificialRoot = storyboard.instantiateViewController(withIdentifier: "SWRevealViewController") 
    currentRoot.present(artificialRoot, animated: false, completion: nil) 
} 

雖然並不理想,這種實現的結果遠遠比實施更好問題描述。

相關問題