如何从“菜单”视图控制器在现有 UIViewControllers 之间导航?

Posted

技术标签:

【中文标题】如何从“菜单”视图控制器在现有 UIViewControllers 之间导航?【英文标题】:How do I navigate between existing UIViewControllers from a "menu" view controller? 【发布时间】:2015-05-01 04:31:09 【问题描述】:

我有一个带有按钮的菜单视图控制器,可以将我带到另一个视图控制器。我的故事板中没有导航控制器。目前,我通过故事板和编程方式使用 segues 过渡到新的视图控制器。我的菜单视图控制器在调用时以模态方式呈现。如何导航到已经实例化的视图控制器而不是每次都创建新的?

【问题讨论】:

因为您必须在全球范围内保存已创建的视图控制器的引用可能在 AppDelegate 中,然后当您从菜单再次显示它时使用该引用.. 【参考方案1】:

您可以使用 Unwind segue 来做到这一点。

我假设有三个 ViewControllers A(Menu)、B 和 C。 现在你按下 A 上的按钮,然后你移动到 B, 现在你按下 B 上的按钮并移动到 C。

现在你想回到 ViewController A,

第 1 步: 在 ViewController A 上创建此函数。

@IBAction func unwindToViewControllerA(segue:UIStoryboardSegue)
    //do your stuff here.

第 2 步:假设您在 ViewController C 上有按钮,点击后您想回到 ViewController A。 p>

-所以转到 StoryBoard 中的 ViewController C, -Ctrl+从“Go to A View Controller”按钮拖到橙色退出按钮,如图所示,

-然后点击 unWindToViewControllerA。

就是这样。

现在单击“Go to A View Controller”按钮后,您将转到“ViewController A”。

我也推荐阅读这个Technical note from Apple。

【讨论】:

我试图使用展开功能,甚至通过从黄色图标拖动到退出图标来使用标识符进行手动转场。但问题是可以从任何视图控制器调用菜单。目前这是我的设置:我有两个视图控制器和一个菜单视图控制器。第一个视图控制器 (A) 有一个与 (B) 相连的按钮,并且 (A) 和 (B) 都有一个指向菜单视图控制器 (C) 的按钮。我有一个函数可以确定显示菜单的视图控制器是否是您在菜单上按下的按钮试图转到哪个视图控制器。 是的,所以在您的任何视图控制器中创建一个按钮,然后按照Step:2。这将 unWind 到 View Controller A。 我没听懂,你的菜单视图控制器是 StoryBoard 中的初始视图控制器吗? 初始视图控制器是 A,转到 B,我打开 C 并单击应该带我回到 A 的按钮。使用手动展开 segue,它确实带我回到 A,但是当我尝试再次使用菜单按钮,它抱怨警告:尝试在 上呈现 已经呈现 并且所有转换都不再起作用。 你是在写Step:1中的方法吗?

以上是关于如何从“菜单”视图控制器在现有 UIViewControllers 之间导航?的主要内容,如果未能解决你的问题,请参考以下文章

如何防止用户从滑出设置菜单中连续两次调用同一个视图控制器?

iOS 如何在显示之前设置 ViewController 视图框架?

如何在 Swift 中正确实现不同视图控制器之间的协议和委托?

如何从左侧打开视图并且应该适用于所有视图控制器

如何在现有视图控制器之上部分加载新的视图控制器?

如何以编程方式设置控制图像视图宽度的滑块