1

je le code suivant pour pousser une nouvelle ViewController dans un contrôleur Scinder:Vérifiez si le contrôleur a déjà été chargé XCode

Level4ViewController *controller = [[Level4ViewController alloc] initWithNibName:@"ModuleViewController" bundle:nil]; 
    [[detailViewController navigationController] pushViewController:controller animated:YES]; 
    [controller release], controller = nil; 

Le seul problème que je dois, si je devais courir cette fois, une nouvelle le contrôleur montrera, je voudrais pouvoir aller à la vue que j'avais avant avec toutes mes données.

Quelqu'un peut-il m'aider ici.

Merci.

EDIT:

code mis à jour?

Level4ViewController *controller; 
    for(UIView *view in self.navigationController.viewControllers) 
    { 
     if([view isKindOfClass:[Level4ViewController class]]) 
     { 
      controller = view; 
      if(controller == nil) 
      { 
       controller = [[Level4ViewController alloc] initWithNibName:@"ModuleViewController" bundle:nil]; 
      } 
      else { 
       controller = [self.navigationController.viewControllers objectAtIndex:1]; 
      } 

     } 
    } 

    [[detailViewController navigationController] pushViewController:controller animated:YES]; 
    [controller release], controller = nil; 
+0

Pourquoi ne vous ouvre pas le contrôleur pour revenir en arrière? –

Répondre

1

UINavigationController possède une propriété viewControllers qui est un NSArray qui détiennent toute la pile qui a été poussé au contrôleur de navigation, dans ce tableau, vous pouvez vérifier votre contrôleur de vue si elle est là utiliser que l'un - vous vérifiez comme celui-ci -

Level4ViewController *lvc; 

for(UIView *view in self.navigationController.viewControllers) 
{ 
    if([view isKindOfClass:[Level4ViewController class]]) 
    { 
      lvc = view; 
    } 
} 

et si vous le sait déjà où l'index de votre viewcontroller est là, vous pouvez l'obtenir à partir de cet indice comme -

Level4ViewController *lvc = [self.navigationController.viewControllers objectAtIndex:1]; 

mise à jour -

Level4ViewController *controller; 
for(UIView *view in self.navigationController.viewControllers) 
{ 
    if([view isKindOfClass:[Level4ViewController class]]) 
    { 
     controller = view; 
    } 
} 

if(controller == nil) 
{ 
    controller = [[Level4ViewController alloc] initWithNibName:@"ModuleViewController" bundle:nil]; 
} 

[[detailViewController navigationController] pushViewController:controller animated:YES]; 
[controller release], controller = nil; 
+0

Mais qu'y at-il une instruction qui peut être utilisée, comme si (level4Controller est déjà chargé puis appuyez sur chargé, sinon appuyez sur nouveau –

+0

après avoir obtenu votre instance de contrôleur de vue à partir de ce tableau vérifier si elle est égale à zéro puis utiliser créer nouveau par exemple et poussez-le et il n'est pas égal à zéro alors utilisez celui-là pour pousser – saadnib

+0

Merci, j'ai édité ma question ci-dessus avec le code que j'ai implémenté, mais je sais que c'est faux, mais je ne sais pas où ... –

0

Si vous utilisez un contrôleur de navigation

FirstScreenViewController *firstScreenVC = [self.storyboard instantiateViewControllerWithIdentifier:@"1S"]; 

    if (![self.navigationController.topViewController isKindOfClass:FirstScreenViewController.class]) 
     [self.navigationController pushViewController:firstScreenVC animated:YES]; 
Questions connexes