Was ist der Unterschied zwischen Modal und Push in Storyboards?

178

Kann mir jemand erklären, was der genaue Unterschied zwischen modalund pushSegue ist?

Ich weiß, dass, wenn wir pushden Segue verwenden, er zu einem Stapel hinzugefügt wird. Wenn wir ihn also weiter verwenden push, belegt er weiterhin Speicher?

Kann mir bitte jemand zeigen, wie diese beiden umgesetzt werden?

ModalSegues können durch einfaches ctrl-clickZiehen und Ziehen zum Ziel erstellt werden, aber wenn ich das mit der pushApp mache, stürzt es ab.

Ich drücke von einem Knopf zu einem UINavigationController, der eine hat UIViewController.

Gaurav_soni
quelle

Antworten:

174

Ein Push-Segue fügt dem Navigationsstapel eine weitere VC hinzu. Dies setzt voraus, dass VC, von dem der Push ausgeht, Teil desselben Navigationscontrollers ist, zu dem der VC gehört, der dem Stapel hinzugefügt wird. Die Speicherverwaltung ist bei Navigationscontrollern und einem Deep Stack kein Problem. Solange Sie sich um Objekte kümmern, die Sie möglicherweise von einem VC zu einem anderen übergeben, kümmert sich die Laufzeit um den Navigationsstapel. Siehe das Bild für eine visuelle Anzeige: NavStack

Ein modaler Segue ist nur eine VC, die eine andere VC modal präsentiert. Die VCs müssen nicht Teil eines Navigationscontrollers sein, und die modal präsentierte VC wird im Allgemeinen als "Kind" der präsentierenden (übergeordneten) VC betrachtet. Die modal dargestellte VC ist normalerweise ohne Navigationsleisten oder Registerkartenleisten. Der präsentierende VC ist auch dafür verantwortlich, den von ihm erstellten und präsentierten modalen VC zu verwerfen.

Hoffe das hilft.

LJ Wilson
quelle
1
@EIJay danke für die tolle Erklärung. Noch eine Frage, wann ich das Modal verwenden muss und wann ich das Push-Segue verwenden muss?
Gaurav_soni
43
Wenn Sie eine Detailansicht einer Zusammenfassungsansicht anzeigen möchten, verwenden Sie im Allgemeinen einen Navigationscontroller und Push-Segmente. Wenn sich die "übergeordnete" Ansicht in Bezug auf Daten nicht wirklich auf die "untergeordnete" Ansicht bezieht, verwenden Sie ein Modal. Ein gutes Beispiel für eine modale Ansicht wäre eine Anmeldeansicht. Die Anmeldeansicht hat in Bezug auf Daten keine Beziehung zur "übergeordneten" Ansicht.
LJ Wilson
5
@TJ Ja, Sie können "Modellketten" erstellen. Wenn Sie eine VC in der Kette schließen, werden alle VCs in der Kette geschlossen. Der Benutzer sieht nur die oberste VC-Entlassung (wenn Sie die Animation aktivieren). Es ist wie bei Navigationssteuerungen.
Constantino Tsarouhas
3
@jchatard Ja. Solange Ihr Segue modal ist, sehen Sie im Storyboard, dass die Navigationsleiste nicht vererbt wird. Klicken Sie einfach auf die erste VC der Modalkette und dann auf Menü Editor -> Einbetten -> Navigationscontroller. Dadurch wird ein Navigationscontroller festgelegt, der allen Modalketten gemeinsam ist. Nicht, dass in diesem Moment nur der Abschnitt für die Anzeige des Navigationscontrollers "modal" ist, während alle Abschnitte innerhalb Ihrer Modalkette "Push" -Segues sein müssen.
HpTerm
3
Push kann nur verwendet werden, wenn der VC, von dem Sie wechseln, einen Navigationscontroller verwendet. Versuchen Sie, von einem VC zu pushen, der nicht in einen Navigationscontroller eingebettet ist, und es wird eine Ausnahme ausgelöst. Das hat also wirklich nichts damit zu tun, wie eng die Daten zwischen Eltern und Kind verbunden sind. Es hat einfach damit zu tun, ob Sie einen Navigationscontroller zur Verwaltung Ihrer VCs verwenden. Sie können genau dasselbe manuell mithilfe von Segues mithilfe von Modalübergängen ausführen.
smileBot
21

Swift 3.0 und XCode 8.2.1 Update

1. Drücken Sie Segue

Push-Segue wurde in Show- Segue umbenannt. Um einen Push-Segue zu erstellen, muss der übergeordnete Ansichts-Controller in den Navigations-Controller eingebettet sein. Der Navigationscontroller bietet eine Navigationsleiste. Sobald Sie zwei Ansichtssteuerungen mit Push-Segue verbinden, wird auf der untergeordneten Ansichtssteuerung automatisch die Navigationsleiste oben angezeigt. Der untergeordnete Ansichts-Controller wird oben auf dem Navigationsstapel hinzugefügt.

Geben Sie hier die Bildbeschreibung ein

Push Segue bietet auch Standardfunktionen. Der untergeordnete Ansichtscontroller verfügt über eine Zurück-Schaltfläche, mit der Sie zum übergeordneten Ansichtscontroller zurückkehren können. Sie können auch nach rechts wischen, um den untergeordneten Ansichts-Controller zu öffnen. Die Animation für Push-Segue ähnelt dem horizontalen Verschieben von Seiten.

Geben Sie hier die Bildbeschreibung ein

Während Sie einen Push-Übergang von einem Ansichts-Controller vornehmen dürfen, der sich nicht in einem Navigations-Controller befindet, verlieren Sie dabei alle Funktionen wie Navigationsleiste, Animation, Geste usw. In diesem Fall sollten Sie Ihren übergeordneten Ansichts-Controller zuerst in den Navigationsansichts-Controller einbetten und dann den Push-Übergang zu den untergeordneten Ansichts-Controllern vornehmen.

Geben Sie hier die Bildbeschreibung ein

2. Modal Segue

Ein modaler Übergang (dh modal vorhanden) wird andererseits über dem aktuellen Ansichts-Controller dargestellt. Der untergeordnete Ansichts-Controller erbt keinen Navigations-Ansichts-Controller, sodass die Navigationsleiste verloren geht, wenn Sie einen modalen Übergang von einem Ansichts-Controller mit Navigations-Ansichts-Controller präsentieren. Sie müssen den untergeordneten Ansichts-Controller erneut in den Navigations-Controller einbetten und einen brandneuen Navigationsstapel starten, wenn Sie ihn zurückhaben möchten. Wenn Sie zum übergeordneten Ansichts-Controller zurückkehren möchten, müssen Sie dies selbst implementieren und dismissaus dem Code aufrufen .

Geben Sie hier die Bildbeschreibung ein

Die Animation für den modalen Übergang ist, dass der untergeordnete Ansichts-Controller am unteren Rand der Seite angezeigt wird. Der Navigationsansichts-Controller ist in dieser Demo ebenfalls verschwunden

Geben Sie hier die Bildbeschreibung ein

Fangming
quelle
6

Die Push-Ansicht muss in a navigationController.

Klicken Sie auf Ihre master viewund wählen Sie in der Menüleiste:

EDITOR->embed in->navigationController
Simone Pistecchia
quelle
Falsch, pushViewkann auch OHNE gebaut werden navigationControllerund diese Antwort ist unvollständig!
Daksh Gargas
1

Hiermit werden Steuerelemente mithilfe benutzerdefinierter Push- und Segue-Methoden für das Storyboard verschoben Storyboard

Mit Modal können Sie ohne Verwendung von Storyboards durch Ansichten navigieren.

Pushkraj
quelle
Wie erstelle ich einen modalen Übergang ohne Verwendung von Storyboards?
Jianpx
@jianpx: Sie können nur dann übergehen, wenn Sie Storyboards verwenden. Andernfalls können Sie den Navigationscontroller oder PresentModalViewController zum Wechseln zwischen Ansichten verwenden.
Pushkraj
@ Pushkraj danke. Meinen Sie damit, dass es keine Möglichkeit gibt, eine Segue nach Code zu erstellen?
Jianpx
@jianpx: Nicht benötigt. Segue wird nur bei Verwendung von Storyboards benötigt.
Pushkraj