2017-05-29 4 views
0

私のアプリケーションのrootViewControllerを変更しようとしていて、それは完全に動作します。しかし、rootViewControllerを変更した後、私のnavigationControllerはnil.Becauseを返すので、新しいコントローラself.navigationController.pushViewControllerをプッシュする簡単なコードは機能しません。swift navigation controller return nil rootviewcontrollerを変更した後

これまで、私は自分のrootViewControllerを変更したい理由を説明したいと思います。私はログインページ(初期表示コントローラ)を持っており、成功したログインユーザーはUITabBarController(3つのタブ)にリダイレクトされます。今私はrootViewControllerをこのUITabBarControllerに変更したいと思います。これは次のコードでうまくいきました。

let appDelegate = UIApplication.shared.delegate as! AppDelegate 
    let destVC = self.storyboard?.instantiateViewController(withIdentifier: "home_view") 
    let rootViewController = appDelegate.window?.rootViewController as! UINavigationController 
    appDelegate.window?.rootViewController = destVC 

ここで、rootViewControllerを変更すると、3つのタブとそれぞれのビューコントローラが完全に機能しています。しかし私のView Controllerの1つでは、ボタンをクリックしてそのボタンをクリックすると、新しいコントローラをユーザーにプッシュしたいと思う。今ここでは、ナビゲーションビューコントローラを返すという問題に直面しています。

let destVC = self.storyboard?.instantiateViewController(withIdentifier: "menu_items_view") as! MenuItems 
    self.navigationController?.pushViewController(destVC, animated: true) 

単純なコードを使用すると何も起こりません。私がデバッグできるのは、自分のself.navigationControllerがnilを返すことだけでした。誰もが私の流れが間違っていると説明することはできますか?

enter image description here

+1

ビュー階層内にナビゲーションコントローラがありますか?あなたが削除して削除したことが私には見えます。 @DanielT。 –

+0

はい、私はビュー階層内のナビゲーションコントローラを持っています。私はあなたを示すスクリーンショットを追加しました。私が試みているのは、ルートビューコントローラをUITabBarControllerに変更することです。これはうまくいきます。あなたが青いボタンで2つのタブイメージで見ることができるように、私はそのボタンをクリックして別のコントローラを押すと何も起こりません。 – BhumaJ

答えて

1

あなたは、ビュー階層からあなたのナビゲーションコントローラを削除しました。あなたが掲示コードを見てみましょう:

let appDelegate = UIApplication.shared.delegate as! AppDelegate 
let destVC = self.storyboard?.instantiateViewController(withIdentifier: "home_view") 
let rootViewController = appDelegate.window?.rootViewController as! UINavigationController 
// at this point your window's root view controller is a navigation controller. 
appDelegate.window?.rootViewController = destVC 
// In the above, you replaced the navigation controller with your destVC. 

あなたのスニーカーはもう自分の足ではない理由、あなたが求めている、あなたのドレスシューズを置くために、あなたのスニーカーを脱いだようにです。


ソリューションは、あなたのタブバーコントローラとナビゲーションコントローラを必要とするビューコントローラの間にナビゲーションコントローラを置くことです。

関連する問題