2012-10-18 4 views
2

J'ai un storyboard avec un UIViewController avec quelques boutons. L'un des boutons effectue une connexion modale à un UINavigationController et le NavController a un UITableViewController intégré. Lorsque je clique sur le bouton sur l'écran d'accueil, il avance vers le NavController mais il n'y a pas de bouton retour.UINavigationController ne montre pas le bouton retour

Alors, comment puis-je obtenir un bouton de retour? J'ai essayé quelques choses, mais pas de chance.

Merci pour l'aide !!

Répondre

6

Si vous présentez le contrôleur de navigation de manière modale, le contrôleur tableview est le seul contrôleur de vue que votre nouveau contrôleur de navigation a poussé. Il n'y aurait pas et ne devrait pas être un bouton de retour dans ce cas.

Il vaudrait mieux ajouter un bouton cancel/done à la barre de navigation via le contrôleur tableview, ce qui rejette la vue modale.

Dans votre contrôleur tableView viewDidLoad: méthode:

UIBarButtonItem *done = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneButtonTapped:)]; 
self.navigationItem.leftBarButtonItem = done; 

//Release done if not using ARC 

ajouter ensuite (la plus simple mise en œuvre) un rejet méthode:

- (void)doneButtonTapped:(id)sender { 

    [self.navigationController dismissViewControllerAnimated:YES completion:nil]; 

} 
+0

Oui, cela fonctionnerait bien. En fait, j'aimerais qu'un bouton Home ramène l'utilisateur à son écran d'accueil avec les boutons. Peut-être même une image de la maison. – LilMoke

0

Un UINavigationViewController gère uniquement une pile de contrôleurs de vue. Vous poussez un viewController sur la pile, et lorsque vous cliquez sur "retour", vous sortez une vue de la pile.

Puisque vous présentez le UINavigationController de manière modale, il n'a aucune connaissance de ce qui était présenté avant. La manière correcte d'obtenir le comportement souhaité est de définir votre UIViewController principal sur le contrôleur de vue racine de UINavigationController. Lorsque l'utilisateur appuie sur un bouton, vous poussez le nouveau UITableViewController sur la pile de UINavigationController.

+0

Je pense que je comprends, mais cela fonctionnera-t-il si j'ai plusieurs boutons sur mon UIViewComtroller? Je vais avoir plusieurs boutons chacun faisant quelque chose de légèrement différent. – LilMoke

+0

Cela devrait fonctionner, à condition que vous configuriez correctement votre conception MVC. En fonction du bouton pressé, vous pouvez actionner différents contrôleurs de vue ou init un contrôleur de vue commune avec des données différentes. – Matias

+0

Ok, alors assurez-vous de bien vous comprendre. Je devrais changer mon UIViewController pour faire de UINavController le contrôleur de vue racine. Mais alors comment faire pour que le contrôleur de navigation affiche le controleur de table? – LilMoke

1

Votre sous-classe UITableViewController est le contrôleur de vue racine du UINavigationController. Par conséquent, un bouton de retour ne sera pas affiché automatiquement. Si appuyer sur une ligne du tableau pousse un second contrôleur de vue sur la pile, alors ce second contrôleur de vue affichera un bouton de retour dans sa barre de navigation. Donc, c'est le comportement attendu.

Vous pouvez ajouter vous-même un bouton "retour" en en créant un (vous aurez besoin d'une image qui ressemble à un bouton arrière ou en dessiner un dans le code) et l'ajouter en tant que leftBarButtonItem de l'élément navigationItem de TableViewController, mais je wouldn Ne fais pas ça. Un contrôleur de vue présenté de manière modale ne devrait pas «revenir». Le bouton devrait plutôt être quelque chose comme "Fermer", "Rejeter" ou "Annuler".

0

Dans mon cas, j'avais un rootviewcontoller qui n'avait pas de barre de navigation visible mais les viewcontollers poussés avaient tous besoin d'une barre de navigation avec un bouton de retour mais ils ne s'affichaient pas. Je travaille dans Xcode 6.1. Dans viewDidAppear pour le rootviewcontroller, j'ai défini:

self.title = @ "un titre"; self.navigationController.navigationBarHidden = YES;

Dans viewDidLoad pour les contrôleurs de vue poussés qui ont besoin de la barre de navigation pour être visible, j'ai défini: self.navigationController.navigationBarHidden = NO; self.navigationItem.hidesBackButton = NO;

Tout semble un peu évident mais je tournais en rond en essayant de montrer la barre de navigation avec le bouton de retour!

Questions connexes