情节提要中的Modal和Push segue有什么区别?


178

有人可以向我解释modalpushsegue 之间的确切区别是什么?

我知道,当我们使用pushsegue时,它会被添加到堆栈中,所以当我们继续使用push它时,它会继续占用内存吗?

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

Modalsegue可以通过简单地ctrl-click拖动到目标位置来创建,但是当我这样做时,push我的应用就会崩溃。

我从一个按钮来推动UINavigationController,有一个UIViewController

Answers:


174

推Segue公司是加入另一VC到导航堆栈。假定发起推送的VC与要添加到堆栈的VC属于同一导航控制器。内存管理不是导航控制器和深层堆栈的问题。只要您要照顾的对象可能是从一个VC传递到另一个VC,则运行时将照顾导航堆栈。参见图像以直观了解: 导航堆栈

一个模式Segue公司仅仅是一个VC提出另一个VC模态。VC不必一定是导航控制器的一部分,并且以模态呈现的VC通常被认为是呈现(父)VC的“子代”。模态呈现的VC通常没有任何导航栏或标签栏。呈现的VC还负责消除其创建和呈现的模态VC。

希望这可以帮助。


1
@EIJay感谢您的出色解释。还有一个问题,我什么时候必须使用模态,什么时候使用push segue?
Gaurav_soni

43
通常,当您要显示摘要视图的详细视图时,请使用导航控制器和Push Segues。如果就数据而言,“父”视图与“子”视图没有真正的联系,则使用模式。模式视图的一个很好的例子是登录视图。就数据而言,“登录”视图与“父”视图实际上没有任何关系。
LJ威尔逊,

5
@TJ是的,您可以创建“模型链”。在链中关闭VC将关闭链中的所有VC-用户仅会看到顶部的VC关闭(启用动画时)。就像导航控制器一样。
君士坦丁·萨鲁哈斯

3
@jchatard是的。只要您的选择是模态的,在情节提要中您将看到导航栏未继承。因此,只需单击模态链的第一个VC,然后单击菜单编辑器->嵌入->导航控制器。这将为您设置一个导航控制器,该导航控制器将对所有模态链都通用。并不是那时,只有用于显示导航控制器的序列是“模态”的,而模态链内部的所有序列都必须是“推送”的序列。
HpTerm 2012年

3
仅当您要查找的VC使用导航控制器时,才可以使用Push。尝试从未嵌入在导航控制器中的VC进行推送,它将抛出异常。因此,这实际上与父子之间的数据连接紧密程度无关,而仅与您是否使用导航控制器来管理VC有关。您可以通过模态转换使用segues手动完成完全相同的操作。
smileBot

21

Swift 3.0和XCode 8.2.1更新

1.推送Segue

Push segue已重命名为Show segue。要创建推送选择,需要将父视图控制器嵌入导航控制器中。导航控制器提供导航栏。将两个视图控制器通过推键连接在一起后,子视图控制器将自动在顶部具有导航栏。子视图控制器将添加到导航堆栈的顶部。

在此处输入图片说明

Push segue还提供默认功能。子视图控制器将具有一个后退按钮,可让您返回到父视图控制器。您也可以向右滑动以弹出子视图控制器。推送搜索的动画就像水平滑动页面。

在此处输入图片说明

尽管允许从不在导航控制器中的视图控制器进行推送选择,但这样做会丢失所有功能,如导航栏,动画,手势等。在这种情况下,您应该先将父视图控制器嵌入导航视图控制器中,然后对子视图控制器进行推送选择。

在此处输入图片说明

2.模态赛格

另一方面,模态选择(即模态存在)在当前视图控制器上呈现。子视图控制器将不会继承导航视图控制器,因此,如果您从带有导航视图控制器的视图控制器中呈现模式选择,导航栏将丢失。您必须再次将子视图控制器嵌入导航控制器中,如果需要返回,则启动一个全新的导航堆栈。如果要返回到父视图控制器,则必须自己实现它并dismiss从代码中调用。

在此处输入图片说明

模态segue的动画是子视图控制器将从页面底部出现。导航视图控制器在此演示中也消失了

在此处输入图片说明


6

推送视图必须内置在中navigationController

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

EDITOR->embed in->navigationController

错误的,pushView也可以不使用它navigationController而建立,这个答案是不完整的!
Daksh Gargas

1

这是使用情节提要的自定义推送和选择方法推送控件 故事板

模态是无需使用情节提要而在视图中导航的方法。


如何在不使用情节提要的情况下创建模式搜索?
jianpx

@jianpx:仅在使用情节提要时才可以进行筛选。否则,您可以使用导航控制器或PresentModalViewController在视图之间进行切换。
Pushkraj

@ Pushkraj谢谢。那么,您是说没有办法通过代码创建序列吗?
jianpx

@jianpx:不需要。仅在使用情节提要时才需要Segue。
Pushkraj
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.