2011-07-01 3 views
7

Je me perds un peu en essayant d'utiliser à la fois un UITabBarController et un UINavigationController dans MonoTouch.Monotouch UITabBarController + UINavigationController

Je peux créer un projet basé sur la navigation, et naviguer en utilisant seulement un navigateur de navigation, très bien. Ou je peux ajouter un tabBarController et naviguer vers quelques écrans principaux, très bien.

Cependant, je n'arrive pas à naviguer dans un autre sans utiliser TabBarController s'il y en a un. Par exemple, je fais une application qui traite de "foo", donc je suis deux vues sur mon tabbar, FooHome, et FooSettings. Comment naviguer vers une nouvelle vue si l'utilisateur clique sur quelque chose comme "Ajouter Foo" dans la vue FooSettings. Le NavigationController.PushToView ne semble pas avoir d'effet, et je ne veux pas ajouter la vue à la tabController car elle est simple et agréable avec seulement deux éléments.

Devrais-je utiliser this.View.AddSubView? L'idée ressemble à une boîte de dialogue, je ne suis pas sûr de savoir comment le faire avec monoTouch ...

Répondre

3

Ajoutez vos contrôleurs FooHome et FooSettings à UINavigationControllers et réglez ces contrôleurs de navigation sur votre contrôleur d'onglet. Par exemple, le premier onglet contiendra un contrôleur de navigation dont le contrôleur racine est FooHome et le deuxième onglet contiendra un contrôleur de navigation dont le contrôleur racine est FooSettings. Lorsque vous appuyez sur Ajouter Foo dans FooSettings, vous allez pousser le nouveau contrôleur dans le second onglet.

+0

merci. exactement ce que j'étais après. – Kye

14

Je luttais avec cela pendant des heures et ce poste m'a aidé. Merci beaucoup. Pour ceux qui sont encore un peu dans le noir, voici mon code:

public override bool FinishedLaunching (UIApplication app, NSDictionary options) 
    { 
     // create a new window instance based on the screen size 
     window = new UIWindow (UIScreen.MainScreen.Bounds); 

     var vc1 = new VideosVC(); 
     var vc2 = new ScheduleVC(); 
     var vc3 = new TheCastVC(); 
     var vc4 = new MerchandiseVC(); 

     UINavigationController uinc1 = new UINavigationController(vc1); 
     UINavigationController uinc2 = new UINavigationController(vc2); 
     UINavigationController uinc3 = new UINavigationController(vc3); 
     UINavigationController uinc4 = new UINavigationController(vc4); 

     tabBarController = new UITabBarController(); 

     tabBarController.ViewControllers = new UIViewController [] { 
      uinc1, 
      uinc2, 
      uinc3, 
      uinc4, 
     }; 

     window.RootViewController = tabBarController; 

     window.MakeKeyAndVisible(); 

     return true; 
    } 
+2

+1 pour l'écriture de votre solution de code pour tous les autres participants! – scraimer

+0

En effet, merci de poster votre code. Je courais dans le même problème et votre code ci-dessus était pratiquement plug-n-play pour moi. –

0

Une autre approche serait d'utiliser le storyboard pour créer vos écrans. Il est très facile d'utiliser un UITabBarController avec UINavigationController. Vous venez de créer des séparations entre eux. Ce qui vous a pris des heures aurait pu être fait en quelques secondes. En outre, en utilisant le storyboard, vous pouvez très rapidement réorganiser les affichages & sans écrire de code; ce qui rend beaucoup plus maintenable.

Questions connexes