Je montre une vue modale qui est une UITableViewController
classe. Pour une raison quelconque, il n'affiche pas la barre de navigation lorsque je le montre. Voici mon code:
SettingsCreateAccount *detailViewController = [[SettingsCreateAccount alloc] initWithStyle:UITableViewStyleGrouped];
detailViewController.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
detailViewController.navigationController.navigationBarHidden = NO;
[self.navigationController presentModalViewController:detailViewController animated:YES];
detailViewController = nil;
[detailViewController release];
Je pensais qu'il était affiché par défaut? Si cela aide, j'appelle cela depuis une autre classe qui est également UITableViewController
gérée par un UINavigationController
. Des idées?
la source
Voici une façon d'afficher la barre de navigation pour ceux qui utilisent des storyboards, suggérée par le didacticiel d' Apple sur Storyboard .
Étant donné qu'un contrôleur de vue modale n'est pas ajouté à la pile de navigation, il n'obtient pas de barre de navigation du contrôleur de navigation du contrôleur de vue de table. Pour donner au contrôleur de vue une barre de navigation lorsqu'elle est présentée de manière modale, intégrez-la dans son propre contrôleur de navigation.
la source
Sur iOS 7 et vous voulez juste une barre de navigation sur votre contrôleur de vue modale pour afficher un titre et quelques boutons? Essayez cette magie dans votre UITableViewController:
la source
[self.view bringSubviewToFront:self.navigationBar];
à la fin de-(void)layoutNavigationBar
.Je souhaite partager comment la solution acceptée peut être utilisée dans des projets avec des storyboards:
L'approche simple consiste à insérer un contrôleur de navigation vierge de storyboard avant le VC qui doit être présenté de manière modale, de sorte que les relations ressemblent à:
Nous avons essayé cette approche pendant un certain temps et avons remarqué que nos storyboards deviennent "pollués" par un grand nombre de ces contrôleurs de navigation intermédiaires lorsque chacun! d'entre eux est utilisé exclusivement pour un! présentation d'un autre contrôleur, que nous souhaitons présenter modalement avec barre de navigation.
Notre solution actuelle consiste à encapsuler le code de la réponse acceptée à une séquence personnalisée:
Ayant cette séquence dans notre projet, nous ne créons plus de contrôleurs de navigation intermédiaires dans nos storyboards, nous utilisons simplement ce ModalPresentationWithNavigationBarSegue comme:
J'espère que cette réponse sera utile aux personnes qui aiment éviter la duplication inutile dans leurs storyboards d'applications.
la source
Si vous n'avez besoin que d'un
NavigationBar
, vous pouvez ajouter une instance deUINavigationBar
et lui attribuer des BarItems.la source
Je voulais juste ajouter quelque chose à ce que @Scott a dit. Sa réponse est certainement la manière la plus simple et la plus acceptée de le faire maintenant avec Storyboards, iOS 7 et 8 ... (et bientôt, 9).
Ajouter définitivement un contrôleur de vue au Storyboard et l'intégrer comme décrit par @Scott est la bonne voie à suivre.
Ensuite, ajoutez simplement le segue en faisant glisser le contrôle depuis le contrôleur de vue source vers la cible (celui que vous souhaitez afficher modalement), sélectionnez "Présenter modalement" lorsque la petite vue apparaît avec les choix pour le type de segue. Probablement bon de lui donner un nom aussi (dans l'exemple ci-dessous, j'utilise "presentMyModalViewController").
Une chose dont j'avais besoin et qui manquait est le cas de @ Scott, c'est lorsque vous voulez réellement transmettre certaines données à ce contrôleur de vue présenté de manière modale qui est intégré dans le contrôleur de navigation.
Si vous récupérez le segue.destinationViewController, ce sera un UINavigationController, pas le contrôleur que vous avez intégré dans le UINavigationController.
Donc, pour accéder au contrôleur de vue intégré à l'intérieur du contrôleur de navigation, voici ce que j'ai fait:
J'espère que cela t'aides!
la source