2017-05-29 62 views
0

我正在嘗試更改我的應用程序的rootViewController,它完美地工作。然而,更改rootViewController後,我的導航控制器返回nil。因爲這甚至我簡單的代碼推任何新的控制器self.navigationController.pushViewController不起作用。swift導航控制器在更改rootviewcontroller後返回nil

在此之前,我想解釋爲什麼我想改變我的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個標籤和他們各自的視圖控制器工作完美。但在我的一個視圖控制器中,我有按鈕,單擊該按鈕時,我想將新控制器推送給用戶。現在我在這裏面臨着無返回導航視圖控制器的問題。

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

當我使用上面的簡單代碼時,什麼都不會發生。所有我能夠調試的是我的self.navigationController返回零。任何人都可以解釋我的流程中的錯誤?

enter image description here

+1

您確定您的視圖層次結構中甚至有導航控制器嗎?它在我看來你已經刪除並刪除它。 –

+0

@DanielT。是的,我的視圖層次結構中有導航控制器。我添加了截圖以向您展示。我正在嘗試將根視圖控制器更改爲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. 

這就像你把你的運動鞋斷穿上你的衣服鞋子,那麼你會問,爲什麼你的運動鞋是不是你的腳了。


解決的辦法是把一個導航控制器之間你的標籤欄控制器需要一個導航控制器的視圖控制器。

相關問題