En utilisant iOS, j'ai 15 ViewControllers maintenant, je veux passer d'un ViewController à un autre View Controller.
J'utilise ce code:
SecondViewController *Sec=[SecondViewController alloc]init];
[self.navigationController popViewController:Sec animated:YES];
Cela montre l'erreur this ViewController not exist
Et ensuite j'utilise ce code:
NSArray *array = [self.navigationController viewControllers];
[self.navigationController popToViewController:[array objectAtIndex:1] animated:YES];
Ce code a raison de passer de thirdViewController à secondViewController. Mais que s'est-il passé lorsque nous sommes passés du neuvième (9e) ViewController au cinquième (5e) ViewController, alors j'utilise ce code dans le neuvième (9e) ViewController:
NSArray *array = [self.navigationController viewControllers];
[self.navigationController popToViewController:[array objectAtIndex:4] animated:YES];
Il ne passe pas du neuvième (9e) ViewController au cinquième (5e) ViewController à part qu'il saute du neuvième (9e) ViewController à huit (8e) ViewController. Je ne sais pas ce qui s'est passé lorsque nous utilisons cette ligne:
NSArray *array = [self.navigationController viewControllers];
NsLog(@"array = %@",array);
Lorsque nous utilisons cela dans Ninth(9th)ViewController
. NsLog montre:
array= First(1st)ViewController;
Second(2nd)ViewController;
Eight(8th)ViewController;
Ninth(9th)ViewController;
Je ne sais pas pourquoi seuls quatre contrôleurs de vue s'affichent. Chaque fois que j'utilise 15 contrôleurs de vue. Ce problème se produit dans chaque contrôleur de vue. Par exemple, si j'utilise pop du quinzième (15e) ViewController au cinquième (5e) ViewController, le même problème se manifeste.
NSArray *array = [self.navigationController viewControllers];
NsLog(@"array = %@",array);
array= First(1st)ViewController;
Second(2nd)ViewController;
fourteenth(14th)ViewController;
fifteenth(15th)ViewController;
Je veux compter le nombre de ViewControllers, puis passer à un ViewController spécifique.
Swift 4.0 - Swift 5.
for controller in self.navigationController!.viewControllers as Array {
if controller.isKind(of: HomeViewController.self) {
self.navigationController!.popToViewController(controller, animated: true)
break
}
}
Vous ne pouvez pas passer à un nouveau contrôleur de vue (comme vous le faites avec votre exemple secondViewController).
Lorsque vous utilisez un UINavigationController, vous
Ajouter un contrôleur à la pile avec:
[self.navigationController pushViewController:<yournewViewController> animated:YES];
passez à la précédente avec:
[self.navigationController popViewControllerAnimated:YES];
Passer à un contrôleur précédent dans la pile (Doit avoir été poussé avant):
[self.navigationController popToViewController:<ViewControllerToPopTo> animated:YES];
Retour à la racine Contrôleur avec
[self.navigationController popToRootViewControllerAnimated:YES];
for (UIViewController *controller in self.navigationController.viewControllers)
{
if ([controller isKindOfClass:[nameOfYourViewControllerYouWantToNavigate class]])
{
[self.navigationController popToViewController:controller animated:YES];
break;
}
}
Essaye ça
[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:0] animated:YES];
Premier:
SecondViewController *Sec=[SecondViewController alloc]init];
[self.navigationController popViewController:Sec animated:YES];
Vous ne pouvez pas le faire, car vous allouez un nouveau contrôleur de vue Sec
qui n’est pas dans un contrôleur de navigation.
Pensez à utiliser ceci:
Vous êtes dans 9 contrôleur de vue
for (int i= 0 ; i < [[self.navigationController viewControllers]count] ; i++) {
if ( [[[self.navigationController viewControllers] objectAtIndex:i] isKindOfClass:[FifiViewControllerClassname class]]) {
[self.navigationController popToViewController:[array objectAtIndex:i] animated:YES];
}
}
Essayez comme ça
MyTableViewController *vc = [[MyTableViewController alloc] init];
NSMutableArray *controllers = [NSMutableArray
arrayWithArray:self.navigationController.viewControllers];
[controllers removeLastObject];
[controllers addObject:vc];
BOOL check = FALSE;
NSArray *viewControllers = [[self navigationController] viewControllers];
id obj;
for( int i=0;i<[viewControllers count];i++)
{
obj=[viewControllers objectAtIndex:i];
if([obj isKindOfClass:[yourclassname class]])
{
check = TRUE;
break;
}
}
if (check)
{
[[self navigationController] popToViewController:obj animated:YES];
}
else
{
yourclassname *yourclassnameObj=[self.storyboard instantiateViewControllerWithIdentifier:@"yourclassStoryBoardID"];
[self.navigationController pushViewController:yourclassnameObj animated:true];
}
Pour Swift 3., utilisez le filtre:
let desiredViewController = self.navigationController!.viewControllers.filter { $0 is YourViewController }.first!
self.navigationController!.popToViewController(desiredViewController, animated: true)