如何在prepareForSegue中手动设置UINavigationController的根目录?

时间:2014-10-24 09:59:23

标签: ios xcode swift uinavigationcontroller interface-builder

登录用户点击后会看到项目列表和相对详细信息视图。

登录后,服务器会告诉我列表中有多少项。如果它只包含一个项目,我应该跳过列表视图,只看细节。

目前我的Interface Builder设置为:

Login → (segue) → [NavigationController] → List → (push) → Detail →...

但是如果只有一个项目,导航控制器的根应该成为详细控制器:

Login → (segue) → [NavigationController] → Detail →...

所以我需要更改导航控制器的viewControllers属性。在登录视图中,我可以在准备segue时访问导航控制器:

// Login View controller
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
  if itemsCount == 1 {
    let navController = segue.destinationViewController as UINavigationController
    let detailController = DetailViewController()
    navController.setViewControllers([detailController], animated: false)
  }
}

我无法按预期工作:当我运行代码时,它会显示详细信息视图,但我在其中设置的所有@IBOutlet都有nil值。

为什么呢?我做错了什么?

1 个答案:

答案 0 :(得分:0)

您需要使用故事板的instantiateViewControllerWithIdentifier函数来创建detailViewController,而不是依赖于普通初始值DetailViewController()。后者只是创建了一个类的新实例,而前者从故事板中读取VC细节并设置所有出口等。