Popover nach Berührung abbrechen

7

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:

  

MainViewController.swift

%Vor%

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.

  

LastViewController.swift

%Vor%

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

    
Victor Sigler 29.01.2015, 20:33
quelle

5 Antworten

17

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

%Vor%


Laden Sie den Link herunter

    
Jageen 08.02.2015, 18:46
quelle
5

Haben Sie in Ihrer Tastenaktion auf dem FinalViewController versucht:

%Vor%     
Jeremy Pope 10.02.2015 08:27
quelle
1

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

%Vor%     
ergoon 10.02.2015 10:26
quelle
0
  

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:

%Vor%

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.

    
sergio 08.02.2015 18:32
quelle
-1

Innerhalb des Viewcontrollers können Sie viewWillAppear ()

überschreiben

Innerhalb 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%     
Aggressor 29.01.2015 20:36
quelle

Tags und Links