Ich habe ein Popover in meinem MainViewController
erstellt, wenn eine Schaltfläche mit UIPopoverPresentationController
berührt wurde und wie in der WWDC 2014 wie der Delegat gesetzt wurde, wie folgt:
%Vor%MainViewController.swift
Das Popover hat eine Ansicht darin und wenn die Ansicht mit einem Tap Gesture Recognizer angeklickt wird, zeige ich LastViewController
mit einem modalen Übergang an. Der modale Übergang wird durch den Interface Builder erstellt, nicht im Code mit einer Aktion zum Präsentieren ein anderes LastViewController
Sobald der LastViewController
gelöscht wurde und ich wieder in MainViewController
bin, bleibt der Popover geöffnet.
Innerhalb des PopOverControllers habe ich nur den Standardcode nicht mehr.
%Vor%LastViewController.swift
Der obige Code wird verwendet, um den LastViewController
zu entfernen, sobald die Schaltfläche innerhalb berührt wird.
Storyboard
Wie kann ich das Popover ablehnen, wenn das andere LastViewController
sichtbar ist oder bevor das andere LastViewController
geöffnet werden soll?
Vielen Dank im Voraus
Ich habe bereits dasselbe Problem über hier .
Das Szenario ist anders, aber die Lösung ist dasselbe
Sie müssen Code schreiben, um den präsentierten View-Controller nach Abschluss des aktuellen View-Controllers zu schließen.
Schreibe den folgenden Code auf deine ablehnendeViewer-Methode von LastViewController.swift
Laden Sie den Link herunter
Haben Sie in Ihrer Tastenaktion auf dem FinalViewController versucht:
%Vor%hier ist, wie ich es tun würde.
Ich benutze normalerweise faule Initialisierung für den PopoverViewController und es ist ContentViewController
%Vor%in meinem contentViewController halte ich einen Verweis auf den UIPopoverController.
%Vor%Wenn ich das Popover zeige, weise ich den popoverController dem contentViewController
zu %Vor% schließe ich das Popover schließlich programmatisch in @IBAction
Das Popover hat eine Ansicht darin und wenn die Ansicht mit einem Tap Gesture Recognizer angeklickt wird, zeige ich einen anderen ViewController mit einem modalen Übergang.
Soweit ich das verstanden habe, sollten Sie in der Lage sein, dismissViewControllerAnimated(_:completion:)
aus der Aktion, die mit dem Erkenner der Tippgeste verknüpft ist. Dadurch wird das Popover, das Sie aufgerufen haben, geschlossen:
Sie können diese Methode auf dem Popover-View-Controller selbst aufrufen, je nachdem, was für Sie bequemer ist:
Der präsentierende View-Controller ist dafür verantwortlich, den von ihm präsentierten View-Controller zu verwerfen. Wenn Sie diese Methode auf dem vorgestellten View-Controller selbst aufrufen, wird die Nachricht automatisch an den präsentierenden View-Controller weitergeleitet.
Innerhalb des Viewcontrollers können Sie viewWillAppear ()
überschreibenInnerhalb dieses Blocks dimiss es
%Vor%Aber der obige Code geht davon aus, dass Sie einen Verweis auf das PopOver-Objekt haben, was meiner Meinung nach keine gute Vorgehensweise ist, basierend auf der Beschreibung des Problems.
Warum sollte nicht der Viewcontroller, der den PopOver erstellt hat, dafür verantwortlich sein, ihn zu zerstören? Setzen Sie dies in die Klasse, die auf die Tastenberührung wartet (die ich auch annimmt, erstellt den PopOver ebenso)
%Vor%Tags und Links swift ios8 uipopovercontroller