如何同时使用带有导航控制器的 segue?

Posted

技术标签:

【中文标题】如何同时使用带有导航控制器的 segue?【英文标题】:How can I use a segue with Navigation Controller at the same time? 【发布时间】:2015-11-02 06:55:58 【问题描述】:

由于我找不到有关此案的任何信息,我想我做错了什么,但不知道为什么。

我有: NavigationController -> (root view) UIViewController (1st) -> (here is a segue) -> UITabBarController (2nd) -> UIViewController

我想在将2nd 推入导航控制器堆栈时从1st UIView 切换到2nd UIView

当我在 prepareForSegue 中执行 pushViewController 时

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) if (segue.identifier == "mySegue") self.navigationController?.pushViewController(segue.destinationViewController, animated: true)

我有异常

应用程序试图以模态方式呈现活动控制器

(这很明显,因为我用导航控制器制作了push,然后继续尝试再次呈现相同的视图)

如何在导航控制器中同时使用 segue?

谢谢!

UPD。如答案中所述,已弃用的 Segue 类型“Push”(不是“显示(例如 Push)”)完全符合我的要求,但已被弃用......有什么“好”的方法吗?

【问题讨论】:

【参考方案1】:

如果您使用故事板来设置转场,您只需将转场类型设置为“推送”,它将从最近的 UINavigationController 祖先推送。你只需要调用self.performSegueWithIdentifier("yourSegueIdentifierHere"),导航控制器就会推送它。

调用后,当前视图控制器将调用prepareForSegue 来设置下一个要呈现的视图控制器。您收到错误是因为您试图让导航控制器推送已尝试呈现的同一视图控制器。

希望这会有所帮助。

【讨论】:

> 你只需要调用 self.performSegueWithIdentifier("yourSegueIdentifierHere") -> 它对我不起作用。新视图出现,但作为简单视图,不像导航控制器那样。 在storyboard中,当你点击segue时,是否设置为Push? 设置为“显示(例如推送)”,简单的“推送”列为“已弃用”。嗯,这个已弃用的“推送”完全按照我的意愿工作......但在这种情况下我不喜欢“弃用”状态:-) 有没有新的方法可以做到这一点?

以上是关于如何同时使用带有导航控制器的 segue?的主要内容,如果未能解决你的问题,请参考以下文章

带有大标题的导航栏上的动画segue错误

我啥时候应该使用导航控制器?

使用带有分段控制的 Storyboard Segue

模态segue推动顶部的附加导航栏滑动

如何使用 segue 从 UIView 导航到 UIView 控制器?

Show Segue from 按钮打开时没有导航控制器