Estoy tratando de descartar un ViewController rápidamente llamando dismissViewController
a unIBAction
@IBAction func cancel(sender: AnyObject) {
self.dismissViewControllerAnimated(false, completion: nil)
println("cancel")
}
@IBAction func done(sender: AnyObject) {
self.dismissViewControllerAnimated(false, completion: nil)
println("done")
}
Pude ver el mensaje println en la salida de la consola, pero ViewController nunca se descarta. ¿Cual podría ser el problema?
ios
swift
viewcontroller
rshankar
fuente
fuente
Respuestas:
De su imagen parece que presentó el ViewController usando push
Se
dismissViewControllerAnimated
usa para cerrar ViewControllers que se presentaron usando modalSwift 2
Swift 4
fuente
Tengo una solución para tu problema. Pruebe este código para descartar el controlador de vista si presenta la vista usando modal:
Swift 3:
O
Si presenta la vista utilizando "push" segue
fuente
si haces esto, supongo que es posible que no recibas el mensaje println en la consola,
fuente
En Swift 3.0 a 4.0 es tan fácil como escribir esto en su función:
O si está en un controlador de navegación puede "abrirlo":
fuente
agregue esta línea entre paréntesis:
fuente
Utilizar:
en vez de:
fuente
Si presenta un controlador sin un controlador de navegación, puede llamar al siguiente código desde un método del controlador presentado.
Si su ViewController se presenta modalmente, la presentación opcional ViewController no será nula y se ejecutará el código.
fuente
Según mi experiencia, agrego un método para descartarme como extensión de UIViewController:
Luego llamo a este método para descartar el controlador de vista en cualquier
UIViewController
subclase. Por ejemplo, en la acción cancelar:fuente
De las documentaciones de Apple :
Por lo tanto, es una mala práctica invocar el método de descarte de sí mismo.
Lo que debe hacer si lo presenta modal es:
fuente
No cree ningún paso desde Cancelar o Listo a otro VC y solo escriba este código en sus botones @IBAction
fuente
Esta es la única forma de descartar el controlador de vista actual y volver al controlador de vista anterior. Puede hacer esto solo a través de Storyboard.
Por favor intente esto, está trabajando conmigo.
Segunda forma - Uso -
navigationController.popViewControllerAnimated(true)
La mejor de las suertes..
fuente
Como referencia, tenga en cuenta que puede estar descartando el controlador de vista incorrecto. Por ejemplo, si tiene un cuadro de alerta o modal que se muestra encima de otro modal. (Podría tener una alerta de publicación de Twitter que se muestre encima de su alerta modal actual, por ejemplo). En este caso, debe llamar a descartar dos veces, o usar un segue de desenrollado.
fuente
Si presenta un ViewController modalmente y desea volver al ViewController raíz, tenga cuidado de descartar este ViewController presentado de manera modal antes de volver al ViewController raíz; de lo contrario, este ViewController no se eliminará de la memoria y provocará pérdidas de memoria.
fuente
En Swift 3.0
Si desea descartar un controlador de vista presentado
fuente
En Swift 4.1 y Xcode 9.4.1
Si usa pushViewController para presentar un nuevo controlador de vista, use esto
fuente
Prueba esto:
fuente
Este código escrito en la acción del botón para descartar
fuente
fuente
Si usa el método presente en el VC primario, entonces debe llamar a esta función, para descartar el VC secundario, use esto
si llama al VC secundario mediante el método push, para descartar el VC secundario, utilice este
fuente