2010-09-21 5 views
7

Je suis confronté à un problème avec une application pour iPad dans laquelle j'aimerais disposer de UINavigationControllers dans les deux vues d'un UISplitView. J'ai regardé d'autres questions similaires ici, mais la plupart des liens vers un tutoriel en ligne qui ne résout pas complètement le problème. Voici une procédure pas à pas 2 minutes pour recréer le problème que je vais avoir:Puis-je utiliser un UINavigationController comme vue détaillée d'un UISplitViewController?

  1. Créer un nouveau projet dans XCode, à partir du modèle d'application à base Scinder.
  2. Ajoutez l'instruction suivante NSLog comme la première ligne dans la méthode willHideViewController de DetailViewController:

    NSLog (@ "barre d'outils:% @", barre d'outils);

Si vous exécutez l'application maintenant, le journal indiquera que la barre d'outils de DetailViewController est active. Maintenant ...

  1. Ouvrez MainWindow.xib et développez le SplitViewController.
  2. Faites glisser un contrôleur de navigation de la bibliothèque sur le contrôleur DetailViewController.
  3. Développez le nouveau contrôleur de navigation et modifiez la classe de l'UIViewController dans un DetailViewController.
  4. Ctrl-faites glisser du composant SplitViewController vers le module DetailViewController et attribuez-le en tant que délégué.
  5. Enregistrez MainWindow.xib et réexécutez l'application.

À ce stade, la vue détaillée comporte une barre de navigation et une barre d'outils vide. Si vous affichez les journaux, vous devriez trouver que la barre d'outils est null. Pourquoi est-ce? Ai-je manqué une sorte de connexion dans Interface Builder? La barre de navigation est-elle le problème pour une raison quelconque? Contrairement au tutoriel à http://www.cimgf.com/2010/05/24/fixing-the-uisplitviewcontroller-template/, je voudrais garder à la fois la barre de navigation et la barre d'outils (de préférence avec la barre d'outils en haut en mode portrait et non visible en mode paysage), de sorte que j'ai toujours un "lorsque l'iPad est en orientation portrait.

Est-ce que quelqu'un a des suggestions pour résoudre ce problème? Un exemple de projet avec ce type de configuration serait idéal.

+0

@B Sweigard: Salut, avez-vous déjà résolu votre problème? J'essaie de faire presque exactement la même chose que vous avez essayé de faire. – matm

Répondre

0

J'ai trouvé que l'UISplitViewController intégré se comporte mal lorsque vous essayez de le combiner avec la plupart des autres sous-classes de contrôleur de vue intégrées. Le MGSplitViewController de Matt Gemmell est beaucoup plus flexible et a plutôt bien fonctionné pour moi, en dépit des pépins bizarres (bien que ceux-ci soient au moins réparables car le code source est fourni).

1

Vous pouvez certainement utiliser un contrôleur de navigation sur la vue détaillée d'un contrôleur de vue partagée. En fait, l'application Paramètres iPad utilise cette approche. Probablement le meilleur moyen d'obtenir cette configuration est de créer un nouveau projet dans Xcode 4.x et sélectionnez le modèle "Master-Detail Application". Il va générer un contrôleur de vue partagé avec 2 contrôleurs de navigation, un pour la vue de gauche et un pour la vue de droite.

Pour votre question de barre d'outils, pour garder les choses simples, je mettrais une barre d'outils dans le bas. Vous pouvez toujours placer des éléments de barre dans la barre de navigation supérieure, bien que vous ne puissiez les placer qu'à gauche, au milieu ou à droite. Si vous avez besoin de beaucoup d'éléments dans la barre supérieure, vous pouvez ajouter une barre d'outils à la vue détaillée et masquer la barre de navigation dans l'événement viewWillAppear de la classe de vue détaillée.

Voici un exemple sur la façon de cacher la barre de navigation et afficher la barre d'outils:

- (void) viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 
    self.navigationController.toolbarHidden = NO; 
    self.navigationController.navigationBarHidden = YES; 
} 
Questions connexes