2017-04-18 15 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() 

しかし、シミュレータは、最初に(画面にログが表示されます古いルートビューコントローラ)を1秒間押し続けると、画面は約30秒から1分ほど黒くなり、最終的に所望のビューコントローラが表示されます。次のようにストーリーボードで

ビューコントローラの構造は次のとおりです。

SWRevealViewController - >ナビゲーションコントローラ - >理想のビューコントローラ(新ルート)

スライドメニューがそうでない場合は失われているためSWRevealViewControllerで始まる理由は、 。

何が起こっているのでしょうか?

+0

ウィンドウキーを作成して表示する前に 'rootViewController' *を設定できますか? – NRitH

+0

@NRitH結果はまったく同じです。 – rodrigochousal

+0

もう少しコードを表示できますか?どのようにloginViewControllerを設定しているのか、あなたが示したこのコードをどのようにトリガするのかを知ることは有益でしょう。 –

答えて

0

これは私のために働く例です。loginViewControllersSWRevealControllerとは関係なくUINavigationControllerのスタックにしてください。簡単な回避策です。

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) 
} 

理想的ではないが、この実装の結果がでの実装よりもはるかに良いことです質問の説明。

関連する問題