Ich versuche , einen Viewcontroller in schnellen zu entlassen durch den Aufruf dismissViewController
in einemIBAction
@IBAction func cancel(sender: AnyObject) {
self.dismissViewControllerAnimated(false, completion: nil)
println("cancel")
}
@IBAction func done(sender: AnyObject) {
self.dismissViewControllerAnimated(false, completion: nil)
println("done")
}
Ich konnte die println-Nachricht in der Konsolenausgabe sehen, aber ViewController wird nie entlassen. Was könnte das Problem sein?
ios
swift
viewcontroller
rshankar
quelle
quelle
Antworten:
Aus Ihrem Bild geht hervor, dass Sie den ViewController per Push präsentiert haben
Mit
dismissViewControllerAnimated
wird ViewController geschlossen, die mit modal dargestellt wurdenSwift 2
Swift 4
quelle
Ich habe eine Lösung für Ihr Problem. Versuchen Sie diesen Code, um den Ansichts-Controller zu schließen, wenn Sie die Ansicht mit modal präsentieren:
Swift 3:
ODER
Wenn Sie die Ansicht mit "Push" -Segue präsentieren
quelle
Wenn Sie dies tun, erhalten Sie möglicherweise keine gedruckte Nachricht in der Konsole.
quelle
In Swift 3.0 bis 4.0 ist es so einfach, dies in Ihre Funktion einzugeben:
Oder wenn Sie sich in einem Navigationscontroller befinden, können Sie ihn "platzen" lassen:
quelle
Fügen Sie diese Zeile in die Klammern ein:
quelle
Verwenden:
anstatt:
quelle
Wenn Sie einen Controller ohne Navigationscontroller präsentieren, können Sie den folgenden Code von einer Methode des präsentierten Controllers aus aufrufen.
Wenn Ihr ViewController modal dargestellt wird, ist der optionale PresentingViewController nicht gleich Null und der Code wird ausgeführt.
quelle
Aufgrund meiner Erfahrung füge ich eine Methode hinzu, um mich als Erweiterung von UIViewController abzulehnen:
Dann rufe ich diese Methode auf, um den View Controller in einer beliebigen
UIViewController
Unterklasse zu schließen. Zum Beispiel in der Abbruchaktion:quelle
Aus Apple- Dokumentationen :
Daher ist es eine schlechte Praxis, die Entlassungsmethode einfach selbst aufzurufen .
Was Sie tun sollten, wenn Sie es modal präsentieren, ist:
quelle
Erstellen Sie keinen Übergang von Abbrechen oder Fertig zu einem anderen VC und schreiben Sie diesen Code nur in Ihre Schaltflächen @IBAction
quelle
Hier ist die eine Möglichkeit, den aktuellen Ansichts-Controller zu schließen und zum vorherigen Ansichts-Controller zurückzukehren. Sie können dies nur über Storyboard tun.
Bitte versuchen Sie es, es funktioniert mit mir.
Zweiter Weg - Verwendung -
navigationController.popViewControllerAnimated(true)
Bestes Glück..
quelle
Beachten Sie als Referenz, dass Sie möglicherweise den falschen Ansichts-Controller schließen. Zum Beispiel, wenn eine Warnbox oder ein Modal über einem anderen Modal angezeigt wird. (Möglicherweise wird zusätzlich zu Ihrer aktuellen modalen Warnung eine Twitter-Post-Benachrichtigung angezeigt.) In diesem Fall müssen Sie zweimal "Entlassen" aufrufen oder einen Abwicklungsbereich verwenden.
quelle
Wenn Sie einen ViewController modal präsentieren und zum Root-ViewController zurückkehren möchten, müssen Sie diesen modal präsentierten ViewController schließen, bevor Sie zum Root-ViewController zurückkehren. Andernfalls wird dieser ViewController nicht aus dem Speicher entfernt und führt zu Speicherverlusten.
quelle
In Swift 3.0
Wenn Sie einen präsentierten View Controller schließen möchten
quelle
In Swift 4.1 und Xcode 9.4.1
Wenn Sie pushViewController verwenden, um einen neuen Ansichts-Controller zu präsentieren, verwenden Sie diesen
quelle
Versuche dies:
quelle
Dieser Code wurde in Button-Aktion geschrieben, um zu schließen
quelle
quelle
Wenn Sie die vorliegende Methode in der übergeordneten VC verwenden, sollten Sie diese Funktion aufrufen, um die untergeordnete VC zu schließen
Wenn Sie die untergeordnete VC mithilfe der Push-Methode aufrufen, verwenden Sie diese Option, um die untergeordnete VC zu schließen
quelle