2017-05-29 58 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. 

这就像你把你的运动鞋断穿上你的衣服鞋子,那么你会问,为什么你的运动鞋是不是你的脚了。


解决的办法是把一个导航控制器之间你的标签栏控制器需要一个导航控制器的视图控制器。

相关问题