iphone - duracion - Eliminando viewcontrollers de la pila de navegación
duracion bateria iphone 7 (7)
Tengo una pila de navegación, con decir 5 UIViewControllers. Quiero eliminar los controladores de vista 3 y 4 en la pila con el clic de un botón en el 5to controlador de vista. ¿Es posible hacer esto? ¿Si es así, cómo?
Esta solución funcionó para mí en swift 4:
let VCCount = self.navigationController!.viewControllers.count
self.navigationController?.viewControllers.removeSubrange(Range(VCCount-3..<VCCount - 1))
su índice de controlador de vista actual en la pila es:
self.navigationController!.viewControllers.count - 1
Primero puede obtener todos los controladores de visualización en el conjunto y luego, después de consultar con la clase de controlador de vista correspondiente, puede eliminar el que desee.
Aquí hay un pequeño fragmento de código:
NSArray* tempVCA = [self.navigationController viewControllers];
for(UIViewController *tempVC in tempVCA)
{
if([tempVC isKindOfClass:[urViewControllerClass class]])
{
[tempVC removeFromParentViewController];
}
}
Creo que esto hará que tu trabajo sea más fácil.
Si está tratando de pasar al controlador de 2da vista desde el controlador de 5ta vista (omitiendo el 3er y el 4to), le gustaría usar [self.navigationController popToviewController:secondViewController]
.
Puede obtener el secondViewController
desde la pila del controlador de navegación.
secondViewController = [self.navigationController.viewControllers objectAtIndex:yourViewControllerIndex];
Usa este código y disfruta:
NSMutableArray *navigationArray = [[NSMutableArray alloc] initWithArray: self.navigationController.viewControllers];
// [navigationArray removeAllObjects]; // This is just for remove all view controller from navigation stack.
[navigationArray removeObjectAtIndex: 2]; // You can pass your index here
self.navigationController.viewControllers = navigationArray;
[navigationArray release];
Espero que esto te ayudará.
Utilizar esta
if let navVCsCount = navigationController?.viewControllers.count {
navigationController?.viewControllers.removeSubrange(Range(2..<navVCsCount - 1))
}
Se ocupará de ViewControllers de navigationController. viewControllers y también un navigationItems apilados en navigationBar.
Nota: asegúrese de llamarlo al menos después de viewDidAppear
Swift 2.0:
var navArray:Array = (self.navigationController?.viewControllers)!
navArray.removeAtIndex(navArray.count-2)
self.navigationController?.viewControllers = navArray
Swift 3 y 4
self.navigationController!.viewControllers.removeAll()
self.navigationController?.viewControllers.remove(at: "insert here a number")
Swift 2.1
eliminar todo:
self.navigationController!.viewControllers.removeAll()
eliminar en el índice
self.navigationController?.viewControllers.removeAtIndex("insert here a number")
Hay un montón de más acciones posibles como removeFirst, rango, etc.