web-dev-qa-db-fra.com

Contrôleur de navigation Storyboard et contrôleur de barre d'onglets

J'essaie d'obtenir la configuration suivante dans Storyboard.

Storyboard

Là où j’ai une vue sous forme de tableau au début et quand j’appuie sur une cellule, elle doit passer au contrôleur de la barre d’onglet, ce qui fonctionne. Mais maintenant, je veux un titre et un bouton de barre de navigation supplémentaire dans les 2 contrôleurs les plus à droite. 

Mais je n'arrive pas à faire glisser un bouton là-bas ou lors de la définition du titre, rien ne s'affiche. Comment puis-je réaliser cette configuration dans le storyboard?

modifier:

Question mise à jour, basée sur la réponse ci-dessous.

New setup

Lorsque j'ai cette nouvelle configuration (donc avec un contrôleur de navigation supplémentaire entre les deux), je peux définir le titre dans le story-board, mais lors de l'exécution de l'application, le titre ajouté n'est pas affiché. 

edit: J'ai téléchargé un projet xcode avec exactement cette configuration. Peut-être que cela peut être utile.

20
Matthijn

Pour changer le titre UINavigationBar (sans avoir besoin de créer 2 autres UINavigationController), vous pouvez simplement utiliser 

[self.parentViewController.navigationItem setTitle:@"Title"];

et pour ajouter le bon usage du bouton

self.parentViewController.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(myRightButton)];

sur la méthode viewDidLoad pour chaque UIViewController référencée à partir de votre UITabBarController.

Si vous souhaitez utiliser des "structures de navigation" dans votre UIViewController à partir de TabItems afin de pouvoir éditer votre BUFViewController.m vers celui-ci:

#import "BUFViewController.h"

@interface BUFViewController ()

@end

@implementation BUFViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    [self.parentViewController.navigationController setNavigationBarHidden:YES];
    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(done)];
}

-(void)done{
    [self.parentViewController.navigationController popToRootViewControllerAnimated:YES];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

Vous devez penser que votre UITabBarController est dans votre parent NavigationController, vous voulez donc masquer le parent UINavigationBar et afficher le vôtre . Après cela, vous pourrez revenir à votre table en utilisant popToRootViewControllerAnimated: sur le UINavigationController du parent.

J'espère que cela pourra aider :)

24
ErickBergmann

Juste au cas où quelqu'un cherchait une approche rapide:

tabBarController?.title = "Your Title"
tabBarController?.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Right Button Title", style: UIBarButtonItemStyle.Plain, target: self, action: "rightButtonFunction")

Le code est mieux placé dans viewDidAppear ou viewWillAppear afin que le titre et le bouton changent lorsque les différents onglets sont enfoncés.

De plus, vous n’auriez pas besoin des contrôleurs de navigation supplémentaires avec cette approche.

10
Cradmon

J'ai regardé votre application de test et je vois très bien le titre sous la barre de navigation. Vous pouvez voir les deux barres de navigation si vous sélectionnez le contrôleur de barre d'onglets et décochez la case "Sous les barres du haut". Cependant, cela vous donne une ombre étrange sur la barre de navigation. Je ne sais pas s'il existe un moyen facile de résoudre ce problème, mais je ne pense pas que cette interface utilisateur avec deux barres de navigation a belle allure. Vous voudrez peut-être éliminer le contrôleur de navigation initial et utiliser une séquence modale pour présenter le contrôleur de barre d’onglet. Vous pourriez ajouter un élément de bouton de barre aux contrôleurs de navigation pour lesquels vous auriez encore à fermer le contrôleur de vue modale.

3
rdelmar

Vous devez remplacer ces contrôleurs de vue par UINavigationViewControllers.

Supprimez les deux contrôleurs de vue de droite.

Faites glisser 2 UINavigationViewControllers sur le storyboard et positionnez-les comme vous le souhaitez.

Ensuite, vous devez relier ces nouveaux contrôleurs de vue de navigation au contrôleur de barre d’onglet. Ctrl-cliquez et glissez du contrôleur de la barre d'onglets vers les contrôleurs de navigation. Sélectionnez "Contrôleurs de vue" dans la section "Relation" du menu qui apparaît. Faites cela pour les deux contrôleurs de navigation.

1
ColdLogic
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"Overview_Register"])
    {
        WDRegisterViewController *obj=(WDRegisterViewController *)[segue destinationViewController];
        obj.str_Title=@"Edit Profile";
        obj.isRegister=NO;
    }
}

            [self performSegueWithIdentifier:@"Overview_Measure" sender:nil];



    UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    WDPeekViewController *Peek = (WDPeekViewController *)[sb instantiateViewControllerWithIdentifier:@"WDPeekViewController"];
 [self.navigationController pushViewController:tabBarController animated:YES];
0
Anand