ios - reconoce - Swift-Cómo descartar todos los controladores de vista para volver a la raíz
itunes esta esperando a que windows update instale el controlador para este iphone (8)
Coloca todos los controladores de vista en la pila, excepto el controlador de vista raíz y actualiza la pantalla.
func popToRootViewController(animated: Bool)
Pero si desea ir a un controlador específico, simplemente use la siguiente función.
func popToViewController(UIViewController, animated: Bool)
Muestra los controladores de vista hasta que el controlador de vista especificado se encuentra en la parte superior de la pila de navegación.
Quiero que mi aplicación pueda ir a un primer controlador de vista cada vez que los usuarios lo deseen.
Así que quiero crear una función para descartar todos los controladores de vista, independientemente de si está insertado en los controladores de navegación o se presenta de manera modesta o abre cualquier método.
Probé varias maneras, pero no pude descartar todos los controladores de vista. hay una manera fácil?
Hola a todos, aquí está la respuesta para Swift-4.
para volver al controlador de vista de raíz, simplemente puede llamar a una línea de código y su trabajo estará listo.
self.view.window?.rootViewController?.dismiss(animated: true, completion: nil)
y si tiene la pantalla de inicio y luego la pantalla de inicio de sesión y desea ir a la pantalla de inicio de sesión, simplemente puede agregar el controlador de vista presentado en el código anterior
self.view.window?.rootViewController?.presentedViewController!.dismiss(animated: true, completion: nil)
Hola: Si está utilizando la navegación, puede utilizar la primera o si está utilizando el modelo de presentación, puede utilizar la segunda
Para la navegación
self.navigationController?.popToRootViewController(animated: true)
Para presentar como modelo
self.view.window!.rootViewController?.dismissViewControllerAnimated(false, completion: nil)
Para lograr lo que desea, modifique la pila de navegación y luego haga popViewController.
let allControllers = NSMutableArray(array: navigationController!.viewControllers)
let vcCount = allControllers.count
for _ in 0 ..< vcCount - 2 {
allControllers.removeObject(at: 1)
}
// now, allControllers[0] is root VC, allControllers[1] is presently displayed VC. write back to nav stack
navigationController!.setViewControllers(allControllers as [AnyObject] as! [UIViewController], animated: false)
// then pop root VC
navigationController!.popViewController(animated: true)
Vea this para la forma de manipular aún más la pila de navegación. Si su VC superior es modal, descártela primero antes del código anterior.
Prueba esto :
self.view.window?.rootViewController?.dismiss(animated: true, completion: nil)
debe descartar todos los controladores de vista por encima del controlador de vista raíz.
Si eso no funciona, puedes hacerlo manualmente ejecutando un bucle while como este.
func dismissViewControllers() {
guard let vc = self.presentingViewController else { return }
while (vc.presentingViewController != nil) {
vc.dismiss(animated: true, completion: nil)
}
}
Desecharía todos los viewControllers hasta que tenga un presentController.
Editar: si desea descartar / desplegar ViewControllers puede usar
self.navigationController?.popToRootViewController(animated: true)
Espero eso ayude.
Puede usar este fragmento de código para configurar su controlador de vista en rootViewController.
let destination = HomeVC()
let appDelegate:UIApplicationDelegate = UIApplication.shared.delegate!
let initialViewController = destination
let navigationController = UINavigationController(rootViewController: initialViewController)
appDelegate.window??.rootViewController = navigationController
appDelegate.window??.makeKeyAndVisible()
Simplemente pida a su rootViewController
que descarte cualquier ViewController
si presenta.
if let appDelegate = UIApplication.shared.delegate as? AppDelegate {
appDelegate.window?.rootViewController?.dismiss(animated: true, completion: nil)
(appDelegate.window?.rootViewController as? UINavigationController)?.popToRootViewController(animated: true)
}
func dismiss_all(view: UIView){
view.window!.rootViewController?.dismiss(animated: true, completion: nil)
}