28 votes

UISplitViewController dans une TabBar (UITabBarController)?

Je suis dans le genre de situation que j'ai besoin de commencer avec un onglet en fonction de l'application et que j'ai besoin d'un avis divergent pour un ou plusieurs onglets. Mais il semble que la vue fractionnée de l'objet contrôleur ne peut pas être ajouté à la tabbarController. (Bien que tabbar objet peut être ajouté à la splitviewcontroller).

Le problème peut être vu sinon: j'ai un plein écran dans la partie gauche, j'ai une vue de table lorsqu'une ligne est sélectionnée dans la table, une fenêtre pop-over devrait sortir en soulignant que ligne. Maintenant, quand toutes les lignes de la liste est sélectionnée, les lignes de cette liste vient de la gauche sous la ligne sélectionnée (uniquement cette ligne doit être visible) et une autre liste sort de la ligne sélectionnée. (Fil d'ariane de navigation de type)

Je pense que je suis clair dans ce que j'ai expliqué. Alors les gars des idées ou des solutions?

S'il vous plaît laissez-moi savoir si je ne suis pas clair dans ma question.

Merci,

Madhup

19voto

g_fred Points 1791

À l'aide du générateur d'interface, créez un contrôleur de vue fractionnée et un contrôleur de barre d'onglets et reliez-les à vos prises:

 @property (nonatomic, retain) IBOutlet UITabBarController *tabBarController;
@property (nonatomic, retain) IBOutlet UISplitViewController *splitViewController;
 

Dans votre délégué d'application didFinishLaunchingWithOption , affectez votre contrôleur de vue fractionnée au contrôleur de la barre d'onglets:

 splitViewController.tabBarItem = [[[UITabBarItem alloc] initWithTitle:@"Title" image:nil tag:0] autorelease];
NSArray *controllers = [NSArray arrayWithObjects:splitViewController,  /* other controllers go here */ nil];
tabBarController.viewControllers = controllers;
[window addSubview:tabBarController.view];
[window makeKeyAndVisible];
 

Cela va créer un contrôleur de barre d'onglets (avec seulement 1 onglet dans ce cas), qui s'affiche correctement dans toutes les orientations.

9voto

Greg Combs Points 2296

J'ai écrit une sous-classe pour le UISplitViewController qui sera à l'écoute pour que les changements d'orientation de l'écran et de s'orienter en conséquence. Avec cette classe, je peux maintenant placer plusieurs points de vue au sein d'un UITabBarController et chaque split view va se comporter correctement au moment de la rotation, même si elle n'est pas au premier onglet. J'ai déployé avec succès cette TexLege et il a été approuvé pour une utilisation dans l'App Store, mais votre kilométrage peut varier. Veuillez voir le dépôt Github.

Hésitez pas à fourche et de le modifier, et je suis toujours intéressé à entendre les commentaires (ou plaintes) à ce sujet. https://github.com/grgcombs/IntelligentSplitViewController

7voto

AppUs Points 6156

J'ai fait un exemple d'application. et a constaté que nous pouvons le faire par programme comme:

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

        NSMutableArray *array = [NSMutableArray array];

        NSMutableArray *tabArray = [NSMutableArray array]; 

        UISplitViewController *splitViewConntroller = [[UISplitViewController alloc] init];

        MainViewController *viewCont = [[MainViewController alloc] initWithNibName:@"MainViewController" bundle:nil];
        [array addObject:viewCont];
        [viewCont release];

        viewCont = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
        [array addObject:viewCont];
        [viewCont release];




        [splitViewConntroller setViewControllers:array];

        [tabArray addObject:splitViewConntroller];

        [splitViewConntroller release];

        array = [NSMutableArray array];

        splitViewConntroller = [[UISplitViewController alloc] init];

        viewCont = [[MainViewController alloc] initWithNibName:@"MainViewController" bundle:nil];
        [array addObject:viewCont];
        [viewCont release];

        viewCont = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
        [array addObject:viewCont];
        [viewCont release];

        [splitViewConntroller setViewControllers:array];

        [tabArray addObject:splitViewConntroller];

        [splitViewConntroller release];

        // Add the tab bar controller's current view as a subview of the window
        [tabBarController setViewControllers:tabArray];

        [window addSubview:tabBarController.view];
        [window makeKeyAndVisible];

        return YES;
    }
 

J'espère que cela t'aides.

2voto

Yan Cheng Points 21

Pour laisser un tabbarcontroller apparaître comme une vue principale pour splitviewcontroller, vous devez réécrire tabbarcontroller afin qu'il prenne en charge ou des orientations (par exemple, en utilisant une catégorie pour la classe UITabBarController)

2voto

user318668 Points 31

Voir mon article sur l'adaptation des contrôleurs de vue fractionnée à une interface de barre d'onglets existante: http://markivsblog.blogspot.com/2010/04/retrofitting-ipad-uisplitviewcontroller.html

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X