Usiłuję szybko zwolnić ViewController, wywołując dismissViewController
numerIBAction
@IBAction func cancel(sender: AnyObject) {
self.dismissViewControllerAnimated(false, completion: nil)
println("cancel")
}
@IBAction func done(sender: AnyObject) {
self.dismissViewControllerAnimated(false, completion: nil)
println("done")
}
Widziałem komunikat println w danych wyjściowych konsoli, ale ViewController nigdy nie zostaje odrzucony. Co może być problemem?
ios
swift
viewcontroller
rshankar
źródło
źródło
Odpowiedzi:
Z twojego obrazu wydaje się, że przedstawiłeś ViewController za pomocą push
The
dismissViewControllerAnimated
Służy do bliskich ViewControllers że prezentowane za pomocą modalSwift 2
Szybki 4
źródło
Mam rozwiązanie twojego problemu. Wypróbuj ten kod, aby zamknąć kontroler widoku, jeśli prezentujesz widok za pomocą modalu:
Swift 3:
LUB
Jeśli przedstawisz widok za pomocą „push” segue
źródło
jeśli to zrobisz, prawdopodobnie nie otrzymasz wiadomości println w konsoli,
źródło
W Swift 3.0 do 4.0 jest to tak proste, jak wpisanie tego w swojej funkcji:
Lub jeśli jesteś w kontrolerze nawigacyjnym, możesz go „pop”:
źródło
dodaj tę linię w nawiasach:
źródło
Posługiwać się:
zamiast:
źródło
Jeśli prezentujesz kontroler bez kontrolera nawigacyjnego, możesz wywołać następujący kod z metody prezentowanej kontrolera.
Jeśli Twój ViewController jest prezentowany modalnie, opcjonalny prezentujący ViewController nie będzie zerowy i kod zostanie wykonany.
źródło
W oparciu o moje doświadczenie dodaję metodę, aby odrzucić mnie jako rozszerzenie UIViewController:
Następnie wywołuję tę metodę, aby zamknąć kontroler widoku w dowolnej
UIViewController
podklasie. Na przykład w akcji anulowania:źródło
Z dokumentacji Apple :
Dlatego złym zwyczajem jest po prostu przywołanie metody „ odrzuć” od siebie.
Co należy zrobić, jeśli prezentujesz to modalnie, to:
źródło
Nie twórz żadnego segmentu od Anuluj lub Gotowe do innego VC i pisz ten kod tylko przyciskami @IBAction
źródło
Oto jeden ze sposobów zamknięcia obecnego kontrolera widoku i powrotu do poprzedniego kontrolera widoku. Możesz to zrobić tylko poprzez Storyboard.
Spróbuj tego, działa ze mną.
Drugi sposób - użycie -
navigationController.popViewControllerAnimated(true)
Powodzenia
źródło
W celach informacyjnych pamiętaj, że możesz odrzucić niewłaściwy kontroler widoku. Na przykład, jeśli na innym modale wyświetla się pole ostrzeżenia lub modal. (Możesz na przykład wyświetlać powiadomienie na Twitterze nad aktualnym powiadomieniem modalnym). W takim przypadku musisz dwukrotnie wywołać odwołanie lub skorzystać z odwijanego segmentu.
źródło
Jeśli prezentujesz ViewController w sposób modalny i chcesz wrócić do głównego ViewController, pamiętaj, aby odrzucić ten modalnie prezentowany ViewController przed powrotem do głównego ViewController, w przeciwnym razie ten ViewController nie zostanie usunięty z pamięci i spowoduje wyciek pamięci.
źródło
W Swift 3.0
Jeśli chcesz zamknąć przedstawiony kontroler widoku
źródło
W Swift 4.1 i Xcode 9.4.1
Jeśli używasz pushViewController do prezentacji nowego kontrolera widoku, użyj tego
źródło
Spróbuj tego:
źródło
Ten kod napisany w akcji przycisku do odrzucenia
źródło
źródło
Jeśli używasz obecnej metody w nadrzędnym VC, powinieneś wywołać tę funkcję, aby zamknąć potomne VC użyj tego
jeśli wywołujesz dziecko VC za pomocą metody wypychania, aby je odrzucić, użyj tego
źródło