vez quitar plus pantalla mac duplicar dividir dividida como aplicaciones abrir iphone ios uinavigationcontroller pop

quitar - split view iphone



¿Cómo puedo abrir dos vistas a la vez desde un controlador de navegación? (16)

Quiero pasar a la tercera vista en la pila de navegación de vuelta a la primera vista.

Sé cómo mostrar una vista de una vez:

[self.navigationController popViewControllerAnimated:YES];

¿Pero cómo hago dos a la vez?

Gracias...


Aquí hay una pequeña función que estoy usando para volver a X ViewControllers:

-(void)backMultiple:(id)data { int back = 2; //Default to go back 2 int count = [self.navigationController.viewControllers count]; if(data[@"count"]) back = [data[@"count"] intValue]; //If we want to go back more than those that actually exist, just go to the root if(back+1 > count) { [self.navigationController popToRootViewControllerAnimated:YES]; } //Otherwise go back X ViewControllers else { [self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:count-(back+1)] animated:YES]; } }


No vi esta respuesta aquí. Si solo desea mostrar algunas (no todo el camino hasta la raíz), puede simplemente recorrer iterativo a través de self.navigationController.viewControllers buscando tipos de clases, o si tiene una referencia, use eso:

for (UIViewController *aViewController in self.navigationController.viewControllers) { if ([aViewController isKindOfClass:[SMThumbnailViewController class]]) { [self.navigationController popToViewController:aViewController animated:YES]; } }


Podrías probar algo como esto:

Rápido

var viewControllers = navigationController?.viewControllers viewControllers?.removeLast(2) // views to pop navigationController?.setViewControllers(viewControllers!, animated: true)

C objetivo

int viewsToPop = 2; [self.navigationController popToViewController: self.navigationController.viewControllers[self.navigationController.viewControllers.count-viewsToPop-1] animated:YES];


Puede abrir el controlador de vista "raíz" (primero) con popToRootViewControllerAnimated :

[self.navigationController popToRootViewControllerAnimated:YES]; // If you want to know what view controllers were popd: // NSArray *popdViewControllers = [self.navigationController popToRootViewControllerAnimated:YES];

Referencia de UINavigationController :

Muestra todos los controladores de vista en la pila excepto el controlador de vista raíz y actualiza la pantalla.

Valor de retorno
Una matriz de controladores de vista que se extraen de la pila.


Puede pasar el controlador de vista inicial (aquel al que desea volver) y luego llamar a esta línea en la última vista:

[self.navigationController popToViewController:yourInitialViewController animated:YES];

L.


Puedes probar esto para saltar también entre la pila del controlador de navegación

NSMutableArray *allViewControllers = [NSMutableArray arrayWithArray:[self.navigationController viewControllers]]; for (UIViewController *aViewController in allViewControllers) { if ([aViewController isKindOfClass:[RequiredViewController class]]) { [self.navigationController popToViewController:aViewController animated:NO]; } }


Si solo desea mostrar 2 al mismo tiempo porque su controlador raíz es (camino) ''más profundo'', entonces 2 podría considerar agregar una categoría a UIviewController por ejemplo:

UINavigationController + popTwice.h

#import <UIKit/UIKit.h> @interface UINavigationController (popTwice) - (void) popTwoViewControllersAnimated:(BOOL)animated; @end

UINavigationController + popTwice.m

#import "UINavigationController+popTwice.h" @implementation UINavigationController (popTwice) - (void) popTwoViewControllersAnimated:(BOOL)animated{ [self popViewControllerAnimated:NO]; [self popViewControllerAnimated:animated]; } @end

Importe la categoría #import "UINavigationController+popTwice.h" en algún lugar de su implementación y use esta línea de código para mostrar 2 controladores a la vez:

[self.navigationController popTwoViewControllersAnimated:YES];

no es tan bueno? :)


Swift 2 - xCode 7.3

Esta podría ser una extensión muy útil para pop UIViewControllers:

extension UINavigationController { func popToViewControllerOfType(classForCoder: AnyClass) { for controller in viewControllers { if controller.classForCoder == classForCoder { popToViewController(controller, animated: true) break } } } func popViewControllers(controllersToPop: Int, animated: Bool) { if viewControllers.count > controllersToPop { popToViewController(viewControllers[viewControllers.count - (controllersToPop + 1)], animated: animated) } else { print("Trying to pop /(controllersToPop) view controllers but navigation controller contains only /(viewControllers.count) controllers in stack") } } }


También puedes probar este:

[self.navigationController popToViewController:yourViewController animated:YES];


Versión Swift a partir de (Swift 1.2 / Xcode 6.3.1) de hacer estallar dos o más veces

var viewControllers = self.navigationController?.viewControllers viewControllers?.removeLast() viewControllers?.removeLast() self.navigationController?.setViewControllers(viewControllers, animated: true)

o

var viewControllers = self.navigationController?.viewControllers var viewsToPop = 2 var end = (viewControllers?.count)! var start = end - viewsToPop viewControllers?.removeRange(Range<Int>(start: start, end: end)) self.navigationController?.setViewControllers(viewControllers, animated: true)


puede regresar al controlador de vista raíz

[self.navigationController popToRootViewControllerAnimated:YES];

o, si la vista a la que desea acceder no es la primera, deberá volver a mostrarla en la vista de su vista anterior.


En Swift 3 , puede abrir uno, dos o más viewcontrollers desde el controlador de navegación de esa manera

let viewControllers = self.navigationController!.viewControllers as [UIViewController] for aViewController:UIViewController in viewControllers { if aViewController.isKind(of: FromWhereYouWantToGoController.self) { _ = self.navigationController?.popToViewController(aViewController, animated: true) } }

Aquí FromWhereYouWantToGoController es el controlador de destino. Espero eso ayude.


Puede usar la pila de UIViewControllers. 1. Obtenga la matriz de todos los viewControllers en la pila. 2. Iterate a través de toda la matriz y encuentra la viewController deseada
haciendo coincidir el tipo de clase. 3. Aparece el viewController.

func popToSpecificViewC { let viewControllers: [UIViewController] = self.navigationController!.viewControllers as [UIViewController]; for viewController:UIViewController in viewControllers { if viewController.isKind(of: WelcomeViewC.self) { _ = self.navigationController?.popToViewController(viewController, animated: true) } } }


NSMutableArray *newStack = [NSMutableArray arrayWithArray:[self.navigationController viewControllers]]; [newStack removeLastObject]; [newStack removeLastObject]; [self.navigationController setViewControllers:newStack animated:YES];


//viewIndex = 1; //viewIndex = 2; //viewIndex = 3; // **[viewControllers objectAtIndex: *put here your viewindex number*] NSArray *viewControllers = [self.navigationController viewControllers]; [self.navigationController popToViewController:[viewControllers objectAtIndex:viewIndex] animated:NO];


[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:1] animated:YES];

objectAtIndex: 1 -> puede pasar el índice que quiera mostrar a