2012-02-22 62 views
163

有人可以向我解释modalpush segue之间的确切区别是什么?故事板中的Modal和Push segue有什么区别?

我知道,当我们使用push segue被添加到一个堆栈,所以当我们继续使用push它一直占用内存?

有人能告诉我这两个是如何实现的吗?

Modal塞格斯可以通过简单的创建CTRL单击和拖动到目的地,但是当我这样做,与push我的应用程序崩溃。

我从一个按钮推到UINavigationController有一个UIViewController

回答

163

A push Segue正在向导航堆栈中添加另一个VC。这假设产生推送的VC是被添加到堆栈的VC所属的同一导航控制器的一部分。内存管理不是导航控制器和深层堆栈的问题。只要您正在处理可能从一个VC传递到另一个VC的对象,运行时就会照顾导航堆栈。看到该图像获得的视觉指示: NavStack

模态Segue公司仅仅是一个VC呈现另一个VC模态。风险投资并不一定要成为导航控制器的一部分,并且虚拟地呈现的风险投资通常被认为是呈现(父)风险投资的“孩子”。模态提供的VC通常不含任何导航栏或标签栏。提交VC也负责解除其创建和呈现的模态VC。

希望这会有所帮助。

+1

@EIJay感谢伟大的解释。还有一个问题,我什么时候需要使用模态以及何时使用push segue? – 2012-02-22 12:11:26

+41

通常,当您想要显示摘要视图的详细视图时,请使用导航控制器和推送段。如果“父”视图与数据与“子”视图无关,则使用模式。模态视图的一个好例子是一个Login视图。只要数据与“父”视图有关,登录视图就没有任何关系。 – 2012-02-22 13:12:17

+0

模态视图控制器可以调用另一个模态视图控制器吗? – 2012-02-22 14:39:17

6

推视图必须建立在navigationController

点击你的master view,然后在菜单栏中选择:

EDITOR->embed in->navigationController 
1

这是使用自定义的推压控制和Segue公司的方法对故事板Story Board

和模态的方式通过视图导航,而无需使用故事板。

+0

如何在不使用故事板的情况下创建模态segue? – jianpx 2013-08-03 03:13:07

+0

@jianpx:只有当你使用故事板时,你才可以继续。否则,您可以使用导航控制器或PresentModalViewController在视图之间切换。 – Pushkraj 2013-08-03 05:58:54

+0

@ Pushkraj谢谢。那么你的意思是没有办法通过代码创建segue? – jianpx 2013-08-04 04:20:28

8

雨燕3.0和8.2.1的XCode更新

1.按下S​​egue公司

推赛格瑞已更名为显示 SEGUE。要创建push segue,父视图控制器需要嵌入到导航控制器中。导航控制器提供导航栏。一旦你连接两个视图控制器推push segue,子视图控制器将自动具有顶部的导航栏。子视图控制器将被添加到导航堆栈的顶部。

enter image description here

推赛格瑞还提供了默认功能。子视图控制器将有一个返回按钮,让你回到父视图控制器。您也可以向右滑动以弹出子视图控制器。 push segue的动画就像水平滑动页面一样。

enter image description here

当你被允许进行从一个视图控制器,是不是在一个导航控制器推SEGUE,你会当你这样做失去了所有的功能,如导航栏,动画,手势等。在这种情况下,您应该先将父视图控制器嵌入到导航视图控制器中,然后再将其推入子视图控制器。

enter image description here

2.模态Segue公司

模态赛格瑞(即本模态),在另一方面,被呈现在当前视图控制器。子视图控制器不会继承导航视图控制器,因此如果使用导航视图控制器从视图控制器中呈现模态segue,导航栏将会丢失。您必须再次将子视图控制器嵌入到导航控制器中,并在需要时启动全新的导航堆栈。如果你想回到父视图控制器,你必须自己来实现这一点,从代码中调用dismiss

enter image description here

动画模式赛格瑞是孩子视图控制器就会从网页底部出现。导航视图控制器也经历了在这个演示

enter image description here