【问题标题】:Navigate with NavigationViewController使用 NavigationViewController 导航
【发布时间】:2015-09-11 10:17:16
【问题描述】:

我想知道如何使用 NavigationController 在应用程序中正确导航,例如每次调用时都不实例化 ViewController:

在Instagram等所有已知的应用程序中,当你点击一个Toolbar Item时,你会访问一个viewController,但是这个的状态是保存的,如果你在一张照片上,你去之后它仍然在这张照片上设置,发布照片等。在我的应用程序中,我的 NavigationController 每次我想访问它时都会实例化一个新的 ViewController,例如,当您在 ViewDidLoad 中加载数据时是时候消耗了。

请问有人可以帮助我吗?

【问题讨论】:

标签: ios swift viewcontroller swift2 navigationcontroller


【解决方案1】:

如果您不想创建新的控制器 - 不要创建它!

创建一次您的控制器,然后重复使用它们。例如,您可以将控制器声明为单例:

let vc1 = MyViewController1()
let vc2 = MyViewController1()
let vc3 = MyViewController1()

当你需要推送一些控制器时,不要创建一个新的,而是重用已经创建的:

navigationVC.pushViewController(vc2, animated: true)

如果您尝试推送已经在导航堆栈中的控制器,UINavigationController 将引发错误。因此,您必须先将其从导航堆栈中删除:

// vc2 - is a controller that could be in the navigation stack and should be pushed once more
var controllers = navigationVC.viewControllers
if let index = controllers.indexOf(vc2){
    controllers.removeAtIndex(index)
}
navigationVC.setViewControllers(controllers, animated: false)

然后你可以像往常一样推送vc2。如果在您的应用中可能,您还应该检查是否应在 vc2 之后立即推送 vc2

【讨论】:

  • 在这种情况下我有这个错误:不支持多次推送同一个视图控制器实例
  • 您想在导航堆栈中使用几个相同的控制器吗?
  • 我想一次又一次地调用我现有的 viewController 来保存这个的状态,在其中一个中我正在完成一个字段,我想要这个字段与我在里面写的内容,下一个我打电话的时候,有可能吗?
  • 好的。您希望能够返回(通过“
  • 不适用于这些,因为我已经为那些隐藏了后退按钮
猜你喜欢
  • 1970-01-01
  • 2014-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多