web-dev-qa-db-fra.com

Application de barre d'onglets avec contrôleur de navigation

J'ai une application iPhone simple qui a une barre d'onglets et 3 onglets. Chaque onglet se charge comme une pointe séparée avec un contrôleur correspondant. Chaque nib contient une table avec d'autres contrôles pour la recherche/filtrage, etc.

Ce que j'aimerais (et ne semble pas trouver d’exemple), c’est d’ajouter un contrôleur de navigation à l’application afin que chaque nib (c’est-à-dire chaque onglet) puisse accéder aux pages de détail supplémentaires.

Devrais-je ajouter un contrôleur de navigation à la fenêtre principale et créer une variable IBOutlet ou le NC devrait-il être ajouté aux nibs?.

45
Adrian Collins

Une fois que vous avez une barre d’onglet dans un fichier XIB, la méthode la plus simple consiste à faire glisser un objet UINavigationController de la fenêtre Bibliothèque (qui ressemble à un bouton de barre de navigation de gauche sur un arrière-plan doré) dans texte seulement, pas l'interface graphique). Placez le contrôleur de navigation à l'intérieur du contrôleur de la barre d'onglets, puis faites glisser votre contrôleur de vue existant à l'intérieur du contrôleur de navigation.

Lorsque vous allez voir cet onglet, vous devriez alors voir une barre de navigation en haut de celui-ci ... Si vous chargez le contrôleur de navigation depuis un autre xib, vous modifierez la barre de navigation dans la barre d'onglets xib.

Voici comment ajouter NavigationController par programmation (par exemple dans votre AppDelegate) 

  UIViewController  *viewController1, *viewController2;

    viewController1 = [[[UIViewController alloc] initWithNibName:@"FirstViewController_iPhone" bundle:nil] autorelease];
    UINavigationController *navigationcontroller = [[[UINavigationController alloc] initWithRootViewController:viewController1] autorelease];

    viewController2 = [[[UIViewController alloc] initWithNibName:@"SecondViewController_iPhone" bundle:nil] autorelease];

    self.tabBarController = [[[UITabBarController alloc] init] autorelease];
    self.tabBarController.viewControllers = [NSArray arrayWithObjects:navigationcontroller, viewController2, nil];

Si vous avez une table dans Viewcontroller1, vous pouvez accéder à Navigationcontroller à l’aide de self.navigationController p. Ex. dans la didSelectRowAtIndexPath pour ouvrir un DetailView

par exemple. 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
    [self.navigationController pushViewController:detailViewController animated:YES];
    [detailViewController release];
}

Dans cet exemple, detailViewController entre avec un fichier NIB, ce qui ajoute une barre de navigation avec un bouton Précédent. Mais si vous initialisez également la detailViewController, vous pouvez ajouter une action (GoBack) à une UIBarButtonItem pour supprimer la detailViewController de son contrôleur de navigation.

-(void) GoBack
{    
    [self.navigationController popViewControllerAnimated:YES];
}
27
Max Ballo

J'ai réalisé que c'était tard, mais cette question est la première sur les résultats de Google aujourd'hui et j'ai donc pensé ajouter une réponse. O'Reilly propose un excellent didacticiel vidéo youtube qui vous guide dans une application de barre de navigation + contrôleur de navigation. Découvrez-le ici: http://www.youtube.com/watch?v=LBnPfAtswgw

13
dnstevenson

beaucoup de réponses, mais aucune vérifiée ...

bien sûr, tout cela est maintenant très facile avec les storyboards dans le constructeur d'interface Xcode:

créez le contrôleur de navigation d’intérêt, puis choisissez le menuEditoret l’élémentEmbed In >, puisTab Bar Controller.

cela a même fonctionné avec les contrôleurs de navigation que Xcode vous présente lorsque vous commencez avec le modèle de contrôleur de vue fractionnée maître/détail pour un nouveau projet. dans les deux cas, j'ai maintenant un contrôleur de barre d'onglets comme maître; pour l'iPhone, il se répercute sur toutes les commandes d'extrémité et sur iPad, il ne conserve les onglets que dans le maître (c'est-à-dire la scission à droite dans le paysage et le survol en portrait).

9
john.k.doe

La façon de penser est la suivante:

Vous voulez que chaque onglet ait un contrôleur de navigation. Ensuite, chaque contrôleur de navigation doit avoir un contrôleur de vue racine et un Nib chargé.

Donc, dans IB, ajoutez des contrôleurs de navigation pour chacun de vos onglets. Ensuite, configurez chaque contrôleur de navigation pour avoir le contrôleur de vue racine et le nib appropriés.

9
August
6
Sara

Ouvrez le fichier XIB de votre UITabBarController (à partir de MainWindow.xib)

Allez à 'Attributs du contrôleur de la barre d'onglets'. Vous verrez une section 'View Controllers', où les contrôleurs de vue de chaque onglet seront mentionnés. Il suffit de changer le type de contrôleur en NavigationController pour l’onglet de votre choix.

Sélectionnez la vue du contrôleur que vous avez modifié, recherchez l'option loadFromNib dans ses attributs et sélectionnez le nib approprié. (comme après avoir changé le type de contrôleur, cette connexion aurait été perdue)

1
dsaw

La question est trop ancienne, mais les SDK sont mis à niveau et certains lecteurs peuvent avoir besoin d'une nouvelle réponse. Donc, maintenant pour les utilisateurs de storyboard, la réponse à utiliser à la fois la barre de contrôle et le contrôleur de navigation est assez simple.

  1. Faites glisser le contrôleur de navigation à l'intérieur du storyboard.
  2. Attribuez la flèche de démarrage au nouveau contrôleur de navigation, ce qui en fait le point de départ.
  3. Faites glisser le contrôleur Tabbar et configurez-le avec les onglets et le contrôleur requis. Vous pouvez configurer le contrôleur de barre de tabulation avec des onglets ultérieurement, également lorsque vous le souhaitez.
  4. Sélectionnez le contrôleur de navigation et liez son 'contrôleur de vue racine' au contrôleur de barre d'onglets.

Cela chargera l'application avec les contrôleurs de navigation et de tabview.

0
Paresh Thakor