2016-06-30 5 views
0

Das klingt vielleicht komisch.Wie kann ich einen modalen Übergang auf einem View-Controller, der modal präsentiert wird, durchführen?

Ich habe eine View-Controller, nennen wir es VC1, die modal als ein Formularblatt dargestellt wird.

Wenn der Benutzer auf eine Schaltfläche in VC1 tippt, wird eine Auswahl als Aktionsblatt angezeigt. Wenn der Benutzer ein bestimmtes Element auswählt und im Aktionsblatt auf "Fertig" tippt, möchte ich modal ein weiteres VC (VC2) präsentieren.

Lassen Sie mich Ihnen die Aktion Blatt:

enter image description here

So habe ich ein "Geschenk Modal" Segue, die VC1 und UINavigationController verbindet. Diese UINavigationController hat VC2 als Root-View-Controller. Das Segment hat eine Präsentation von "Form Sheet" und eine "Flip Horizontal" Präsentation.

Wenn ich meine App testen, erscheint diese Warnung in der Konsole und keine View-Controller überhaupt vorgestellt:

Warnung: Der Versuch, auf das präsentieren bereits präsentiert (null)

Und ich dachte "Worüber zum Teufel redet es? Wie kann VC1 Null darstellen?" Das Seltsame ist, dass es null (das ist die Terminologie von C# und Java) anstelle von nil (die Swift verwendet) verwendet.

Ich habe verschiedene Übergänge und Präsentationen ausprobiert. Aber die gleiche Nachricht erscheint. Ich habe auch versucht, die UINavigationController zu entfernen und VC2 direkt zu präsentieren. Dieses Mal ändert sich die Fehlermeldung:

Warnung: Versuch zu präsentieren, auf dem bereits präsentiert (null)

Wie kann ich VC2 modal präsentieren?

+0

Man kann Vc modal nicht auf einem anderen Vc präsentieren, der modal selbst präsentiert wird. Was Sie tun können: VC1 und dann VC2 auf dem gleichen Host vc – Elena

+0

@Elena entlassen Aber nach ein paar Versuchen habe ich gerade herausgefunden, dass ich 'dispatch_after' anrufen kann, um dieses Problem zu lösen. Ich werde eine Antwort posten. – Sweeper

+0

@Elena Können Sie das erklären? – Sweeper

Antwort

0

Nach einigen Versuchen fand ich heraus, dass dispatch_after wie folgt aufrufen und die Durchführung des segue löst das Problem. Ich weiß nicht warum.

dispatch_after(DISPATCH_TIME_NOW, dispatch_get_main_queue()) { 
    self.performSegueWithIdentifier("someIdentifier", sender: self) 
} 

Vielleicht ist dies wegen einer Art von Action-Blatt Magie.

+0

Was ist "Selbst" in diesem Fall? – Elena

+0

Es ist VC1. @ Elena – Sweeper

Verwandte Themen