展开到没有 NavigationController 的特定 ViewController

Posted

技术标签:

【中文标题】展开到没有 NavigationController 的特定 ViewController【英文标题】:Unwind To Specific ViewController Without NavigationController 【发布时间】: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 你能展示你的代码吗? 如果我理解你的问题,你不使用导航控制器吗? 【参考方案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];

【讨论】:

以上是关于展开到没有 NavigationController 的特定 ViewController的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式导航到另一个视图控制器/场景

没有 JQuery 的 Django Loop for Window 展开/折叠

如何在 UINavigationController 中为所有视图控制器添加 UiBarButtonItem

使用 Swift 在没有情节提要的情况下展开 segue

列表框展开所选项目

从 UINavigationController 中删除动画推送展开?