2011-03-19 3 views
2

J'ai un modalView plein écran appelé comme ceci:iPhone - Barre de navigation Bouton Retour article ne répond pas

PreferencesController *nextWindow = [[[PreferencesController alloc] initWithNibName:@"Preferences" bundle:nil] autorelease]; 
UINavigationController* navController = [[[UINavigationController alloc] initWithRootViewController:nextWindow] autorelease]; 
[self presentModalViewController:navController animated:YES]; 

Ensuite, à partir de ce modalView je pousse une autre vue:

MyController *nextWindow = [[[MyController alloc] initWithNibName:@"tmp" bundle:nil] autorelease]; 
    [self.navigationController pushViewController:nextWindow animated:YES]; 

Dans ce nouveau contrôleur, J'ai ce viewDidLoad:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    self.title = @"Borders"; 
    self.navigationController.navigationBarHidden = NO; 
} 

Le leftBarButtonItem n'est pas actif, je veux dire le toucher ne pas mettez-le en surbrillance et il ne revient pas à la vue précédente.

Mes vues sont affichées en plein écran, avec [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone]; appelée lors de l'initialisation de l'application.

La barre de navigationBar est 0,0,320,44.
Le cadre de vue de navigation de navigationBar est 0,0,320,480.
Le cadre de vue viewController est 0,0,320,436.

J'ai essayé d'appeler viewDidLoad self.navigationController.navigationBar.userInteractionEnabled = YES; et self.navigationItem.leftBarButtonItem.enabled = YES; sans effet.

Que se passe-t-il?

EDIT:
Mon self.navigationController.navigationItem.backBarButtonItem est NUL. self.navigationController.navigationItem n'est pas NIL

+0

Quel autre code avez-vous dans votre viewDidLoad? –

+0

@Wayne Hartman: C'est tout le code. – Oliver

+0

Cela se produit-il uniquement pour ce contrôleur de vue particulier (MyController) ou est-ce le même comportement avec tout autre contrôleur de vue poussé sur la pile du contrôleur de navigation à partir de ce point dans votre application? Je veux dire que le code que vous avez posté a l'air ok, autant que je sache. – hennes

Répondre

0

J'ai trouvé la solution. Le problème était que la première vue était appelée depuis la superposition, et non depuis le sélecteur. Garder une référence au Picker dans la superposition, et d'appeler la vue de celui-ci résout le problème:

De la superposition:

[self.picker presentModalViewController:navController animated:YES]; 

fonctionne

au lieu de:

[self presentModalViewController:navController animated:YES]; 
1

Chaque fois que ce genre d'absence de réponse m'arrive, c'est toujours à cause de problèmes de cadrage. c'est-à-dire que la vue d'ensemble du NavigationController est plus petite que la vue du NavigationController. Je sais que vous dites que tout est en mode plein écran, mais je vérifierais que tout est en mode plein écran en activant "clipsSubviews" pour chaque vue de la hiérarchie.

+0

J'ai essayé la sous-vue du clip et j'ai également essayé de forcer self.wantsFullScreenLayout = YES; self.navigationController.wantsFullScreenLayout = YES; dans viewDidLoad, et cela ne change pas le problème. – Oliver

+0

la frame navigationBar est 0,0,320,44 et la frame navigation de navigationBar est 0,0,320,480. Le cadre de controlelrsview est 0,0,320,436 – Oliver

0

Je viens d'avoir cette question, je ne sais pas pourquoi cela fonctionne, mais au lieu de faire:

UIBarButtonItem *backButton = 
[[[UIBarButtonItem alloc] initWithTitle:@"Back" 
            style: UIBarButtonItemStyleBordered 
           target:nil 
           action:nil] autorelease]; 

self.navigationItem.leftBarButtonItem = backButton; 

j'ai remplacé la deuxième ligne avec

self.navigationController.navigationItem.leftBarButtonItem = backButton; 

qui fonctionne pour moi.

+0

merci, mais je ne crée jamais ce bouton. Il est généré automatiquement par le NavigationController. Je ne peux donc pas appliquer votre solution dans ce cas. événement – Oliver

+0

si je force dans viewDidLoad self.navigationController.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle: @ "Retour" style: UIBarButtonItemStyleBordered cible: néant l'action: néant] autorelease]; Rien ne change et le nom du bouton ne change pas non plus. – Oliver

+0

@Oliver Êtes-vous sûr de référencer le bon leftBarButtonItem? Je pense que c'est le contrôleur précédent qui définit l'action de leftBarButtonItem, donc si vous avez les contrôleurs 1 et 2, alors le réglage du bouton back pour 2 doit être fait dans 1. – streamba

Questions connexes