ios - life - viewcontroller ionic
¿Cómo descartar ViewController en Swift? (14)
Estoy tratando de descartar un ViewController rápidamente llamando a dismissViewController
en un IBAction
@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 de impresión en la salida de la consola, pero ViewController nunca se descarta. ¿Cual podría ser el problema?
- incrustar la Vista que desea descartar en un NavigationController
- agregue un BarButton con "Hecho" como identificador
- invocar el Editor Asistente con el botón Hecho seleccionado
- crea un IBAction para este botón
agregue esta línea entre los paréntesis:
self.dismissViewControllerAnimated(true, completion: nil)
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 sobre otro modal. (Podría tener una alerta de publicación de Twitter que se muestra encima de su alerta modal actual, por ejemplo). En este caso, debe llamar a despedir dos veces o utilizar un segue de desenrollado.
Desde su imagen, parece que presentó ViewController usando push
Tienes que usar
navigationController.popViewControllerAnimated(true)
El dismissViewControllerAnimated
se usa para cerrar ViewControllers que se presentaron utilizando modal
Actualización de Swift 3.0:
navigationController?.popViewController(animated: true)
dismiss(animated: true, completion: nil)
En Swift 3.0 a 4.0 es tan fácil como escribir esto en tu función:
self.dismiss(animated: true, completion: nil)
O si estás en un controlador de navegación, puedes "mostrarlo":
self.navigationController?.popViewController(animated: true)
En función de mi experiencia, agregué un método para descartarme como extensión de UIViewController:
func dismissMe(animated: Bool, completion: (()->())?) {
var count = 0
if let c = self.navigationController?.viewControllers.count {
count = c
}
if count > 1 {
self.navigationController?.popViewController(animated: animated)
if let handler = completion {
handler()
}
} else {
dismiss(animated: animated, completion: completion)
}
}
Luego llamo a este método para descartar el controlador de vista en cualquier subclase UIViewController
. Por ejemplo, en cancelar acción:
class MyViewController: UIViewController {
...
@IBAction func cancel(sender: AnyObject) {
dismissMe(animated: true, completion: nil)
}
...
}
Esta es la única manera de descartar el controlador de vista actual y regresar al controlador de vista anterior. Puedes hacerlo a través de Storyboard solamente.
- Abrir Storyboard
- Haga clic con el botón derecho en el botón Cancelar y arrástrelo al controlador de vista anterior, donde desea regresar al controlador anterior
- Ahora suelte el clic derecho y podrá ver algunas acciones que se ejecutan en el botón cancelar.
- Ahora elija la opción "presente popover" de la lista
- Ahora puede descartar su vista actual haciendo clic en el botón cancelar
Por favor, intente esto, está trabajando conmigo.
Second Way - Use - navigationController.popViewControllerAnimated(true)
La mejor de las suertes..
Este código escrito en la acción del botón para descartar
@IBAction func cancel(sender: AnyObject) {
dismiss(animated: true, completion: nil)
}
Si presenta un ViewController de manera modal y desea regresar al ViewController raíz, tenga cuidado de descartar este ViewController presentado de manera modal antes de volver al control raíz ViewController; de lo contrario, este ViewController no se eliminará de la memoria y provocará pérdidas de memoria.
Si presenta un controlador sin un Controlador de navegación, puede llamar al siguiente código desde un método del controlador presentado.
self.presentingViewController?.dismiss(animated: true, completion: nil)
Si su ViewController se presenta de manera modal, la presentación de control de vista opcional no será nula y el código se ejecutará.
Tengo una solución para tu problema. Pruebe este código para cerrar el controlador de vista si presenta la vista con modal:
Swift 3:
self.dismiss(animated: true, completion: nil)
O
Si presenta la vista usando segue "push"
self.navigationController?.popViewController(animated: true)
Utilizar:
self.dismissViewControllerAnimated(true, completion: nil)
en lugar de:
self.navigationController.dismissViewControllerAnimated(true, completion: nil)
si haces esto, supongo que es posible que no obtengas un mensaje de impresión en la consola,
@IBAction func cancel(sender: AnyObject) {
if(self.presentingViewController){
self.dismissViewControllerAnimated(false, completion: nil)
println("cancel")
}
}
@IBAction func done(sender: AnyObject) {
if(self.presentingViewController){
self.dismissViewControllerAnimated(false, completion: nil)
println("done")
}
}
No cree ningún intervalo de Cancelar o Listo a otro CV y solo escriba este código en sus botones @IBAcción
@IBAction func cancel(sender: AnyObject) {
dismiss(animated: false, completion: nil)
}
En Swift 3.0
Si desea descartar un controlador de vista presentado
self.dismiss(animated: true, completion: nil)