iOS 6 Storyboards: modale Ansicht wird nicht abgelehnt

8

Ich verwende Xcode 4.5 und iOS 6.

Ich entwickle eine universelle Anwendung, die Storyboards verwendet. Ich habe einen View-Controller, der eine Schaltfläche in der Navigationsleiste hat. Wenn die Schaltfläche angetippt wird, verwende ich einen Übergang, um einen anderen Ansichtscontroller als modal darzustellen. Der Modalansicht-Controller verfügt in seiner Navigationsleiste über die Schaltflächen Abbrechen und Speichern. Im Storyboard sind die modalen Schaltflächenelemente mit Aktionen für die neue Aktion Beenden verknüpft, die auf den übergeordneten Ansichtscontroller zugreifen, das modale verwerfen und einen Aktionshandler aufrufen soll.

Das funktioniert gut auf dem iPhone, aber ich sehe Probleme auf dem iPad. Wenn das Modal im Vollbildmodus angezeigt wird, funktioniert alles auf dem iPad. Wenn ich den Modus zu Seitenblatt oder Formularblatt ändere (was in meinem Fall das gewünschte Verhalten ist), wird der Action-Handler aufgerufen, aber der modale View-Controller wird nicht automatisch geschlossen.

Hat jemand anderes dieses Verhalten gesehen? Gibt es etwas, das du getan hast, um es zu reparieren?

Danke.

    
Michael Collins 27.10.2012, 17:21
quelle

4 Antworten

6

Danke, dass Sie sich danach erkundigt haben, da ich gerade auf dasselbe Problem gestoßen bin. Ich nehme an, dass es ein Fehler ist, aber ich habe ihn noch nicht bei Apple eingereicht. In der Zwischenzeit besteht die einfache Lösung darin, dismissViewController:animated: in Ihrer unwind: -Implementierung (d. H. In der mit dem Abwicklungssegment verbundenen Aktionsmethode über das Exit-Symbol) aufzurufen, wodurch die modale Ansicht selbst verkleinert wird.

Meine einzige Sorge über diese Lösung ist, dass, wenn dieser ein Fehler ist und Apple ihn schließlich behebt, ihre Behebung irgendeinen Code mit dieser Problemumgehung bricht? Nur die Zeit wird es zeigen ...

Späteres Bearbeiten : Ich habe einen viel besseren Workaround gefunden. Unterklassieren Sie die übergeordnete Klasse (Klasse) der Klasse, zu der Sie die Rolle abwickeln möchten, und implementieren Sie stattdessen die Abwicklungsfunktion. In meiner App sieht die Situation beispielsweise so aus:

%Vor%

Der Exit- / Unwind-Übergang von ThirdViewController zurück zu DetailViewController demonstriert den Fehler - die unwind: -Implementierung wird aufgerufen, aber die Formularansicht wird nicht verworfen. Aber wenn ich UISplitViewController ableiten und unwind: dort implementiere, funktioniert es gut. (Die unwind: -Implementierung kann leer sein; der Punkt ist, dass die Formularansicht automatisch geschlossen wird.) Dies ist offensichtlich ein Problem, das mit Container-View-Controllern zu tun hat, und Sie können es lösen, indem Sie es dem Container überlassen.

Siehe mein Beispielprojekt, das auf Ссылка

hochgeladen wurde     
matt 11.11.2012 20:05
quelle
4

Cool, wenn der Modal-View-Controller automatisch geschlossen wurde, aber in Apples Beispiel hier , sie verwenden einen modalen Übergang für das Segment, rufen dann aber explizit ablickViewControllerAnimated: completion auf: in der Aktion unwind (Exit), um sie zu schließen.

    
bfalling 18.01.2013 16:51
quelle
2

Ich hatte das gleiche Problem, also was ich getan habe, war:

%Vor%

Auf diese Weise bin ich sicher, den Standardweg für iPhone zu verlassen und Entlassung mit iPad zu erzwingen.

    
Frédéric Adda 11.08.2013 12:47
quelle
0

Ich hatte ein ähnliches Problem. Mein modaler Übergang würde sich nicht entspannen. Nach viel zu viel Zeit verschwendete ich das Problem. Es war meine Schuld.

Ich hatte eine schlecht geschriebene - (BOOL)canPerformUnwindSegueAction:(SEL)action fromViewController:(UIViewController *)fromViewController withSender:(id)sender im Ziel-Controller. Das neue Segment, das ich gerade geschrieben hatte, wurde nicht erwartet, also gab es NO zurück. Im Wesentlichen wurde meinem neuen Segment gesagt, dass ich mich nicht durch irgendeinen anderen Code entspannen soll.

    
Erik Allen 11.01.2014 00:10
quelle