【问题标题】:Unwind To Specific ViewController Without NavigationController展开到没有 NavigationController 的特定 ViewController
【发布时间】:2017-11-20 04:42:34
【问题描述】:

我试图在不使用navigationController 的情况下放松到特定的viewController。例如,我有一组用户需要回答的问题。根据他们的回答,他们要么需要解开到根控制器或第一个问题。我知道如何将它们导航到根控制器,我只是不知道如何返回到任何其他特定控制器。我的理解是,如果我要使用 segue 从 viewController 4 -> 2 出发,它将使用更多内存,并且堆栈最终可能会像 1->2->3->4->2 等...

任何建议将不胜感激。

【问题讨论】:

  • 你可以使用navigationController函数调用self.navigationController?.popToViewController(VC, animated: true) 指定你想去的地方
  • 由于某种原因,当我尝试它说我无法将 TestViewController.type 转换为预期的参数 UIViewController。有什么想法为什么会这样说?
  • 我认为你正在传递 .type 值而不是 UIVewcontroller 使用 VC 声明作为 let VC = self.storyboard?.instantiateViewController(withIdentifier: "ChekViewController") ! ChekViewController
  • 你能展示你的代码吗?
  • 如果我理解你的问题,你不使用导航控制器吗?

标签: ios swift xcode uiviewcontroller


【解决方案1】:

在您想要放松的每个 VC 中,您需要创建一个带有一个参数 (_ segue UIStoryboardSegue) 的 @IBAction 函数,然后在您的情节提要中,您转到要从中放松的 vc,然后在顶部控件上单击拖动VC 图标和退出图标。您需要选择展开功能,然后在左侧的 VC 树中出现一个新的 segue。点击 segue 会给你一个选项,就像普通的 soryboard segues 一样给它一个 ID。命名后,您可以以编程方式使用标识符执行 segue。您可以根据需要添加任意数量的这些 segue。

【讨论】:

  • 这工作完美无缺,这正是我想要的。非常感谢!
  • 虽然它执行向后过渡但无法以这种方式传递数据。
【解决方案2】:

您可以使用类似于以下方法的方法一次弹出任意数量的视图。

+ (void)popBackWithSourceViewController:(UIViewController *)viewController viewsToPop:(int) viewsToPop {            
    [viewController.navigationController popToViewController:viewController.navigationController.viewControllers[viewController.navigationController.viewControllers.count-viewsToPop-1];
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多