Question

Je suis en genre de situation que je dois commencer par une application basée sur l'onglet et que je besoin d'un point de vue partagé pour un ou plusieurs onglets. Mais il semble que l'objet contrôleur de vue partagé ne peut être ajouté à la tabbarController. (Bien que l'objet peut être ajouté TabBar au splitviewcontroller).

Le problème peut être vu otherways: J'ai un plein écran dans la partie gauche, j'ai une vue de tableau quand une ligne est sélectionnée dans la table un popover devrait sortir pointant cette ligne. Maintenant, quand une ligne dans la popover est sélectionnée, les lignes de cette popover vient à la gauche sous la ligne sélectionnée (uniquement cette ligne serait visible) et un autre popover sort de la ligne sélectionnée. (Type de navigation miettes de pain)

Je pense que je suis clair dans ce que je l'ai expliqué. Alors les gars des idées ou des contournements de travail?

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

Merci,

Madhup

Était-ce utile?

La solution 3

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

- (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;
    }

Hope this helps.

Autres conseils

Utilisation du constructeur d'interface, créer un contrôleur de vue partagé et un contrôleur de barre d'onglets et de les relier à vos points de vente:

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

Dans votre délégué application didFinishLaunchingWithOption, attribuez votre contrôleur de vue partagé sur le contrôleur de 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 est affiché correctement dans toutes les orientations.

J'ai écrit une sous-classe pour le UISplitViewController qui écoutera les changements à l'orientation de l'appareil et se orienter en conséquence. Avec cette classe, je peux maintenant placer des vues dans un fractionnés UITabBarController et chaque vue fourchues se comporter correctement lors de la rotation, même si ce n'est pas l'onglet en avant. Je l'ai déployé avec succès dans cette TexLege et il a été approuvé pour une utilisation dans l'App Store, mais votre kilométrage peut varier. S'il vous plaît voir le dépôt sur GitHub.

Ne hésitez pas à la fourchette et le modifier, et je suis toujours intéressé par les commentaires (ou entendre) plaintes à ce sujet. https://github.com/grgcombs/IntelligentSplitViewController

Pour laisser un tabbarcontroller apparaître comme une vue maître pour splitviewcontroller vous devez réécrire tabbarcontroller afin qu'il soutiendra ou orientations (dire, en utilisant une catégorie pour la UITabBarController de classe)

Voir mon post sur la modernisation des contrôleurs de vue fractionnée à une interface de barre d'onglets existants:

J'ai créé une sous-classe de UITabBarController qui se propage correctement les messages de rotation à tous les UISplitViewControllers qu'il contient. Cela permet de maintenir l'état interne correct des UISplitViewControllers. Cependant, l'une des méthodes de délégué SplitViewController n'est pas appelé si le SplitViewController n'est pas visible, donc je compte pour cela dans le contrôleur de vue détaillée méthode viewWillAppear. J'ai confirmé cela fonctionne dans iOS5.0 - iOS6.1

OSTabBarController.m

#import "OSTabBarController.h"

@implementation OSTabBarController

-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{
    [super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
    for(UIViewController *targetController in self.viewControllers){
        if(targetController != self.selectedViewController && [targetController isKindOfClass:[UISplitViewController class]]){
            [targetController willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
        }
    }
}

-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation{
    [super didRotateFromInterfaceOrientation:fromInterfaceOrientation];
    for(UIViewController *targetController in self.viewControllers){
        if(targetController != self.selectedViewController && [targetController isKindOfClass:[UISplitViewController class]]){
            [targetController didRotateFromInterfaceOrientation:fromInterfaceOrientation];
        }
    }
}

@end

DetailViewController

@implementation OSDetailViewController

-(void)viewWillAppear:(BOOL)animated{
    //the splitViewController:willHideViewController:withBarButtonItem:forPopoverController: may not have been called
    if(!UIInterfaceOrientationIsPortrait(self.interfaceOrientation)){
        self.navigationItem.leftBarButtonItem = nil;
    }
}

#pragma mark - UISplitViewControllerDelegate Methods

- (void)splitViewController:(UISplitViewController *)splitController willHideViewController:(UIViewController *)viewController withBarButtonItem:(UIBarButtonItem *)barButtonItem forPopoverController:(UIPopoverController *)popoverController
{
    [self.navigationItem setLeftBarButtonItem:barButtonItem animated:YES];

}

- (void)splitViewController:(UISplitViewController *)splitController willShowViewController:(UIViewController *)viewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem
{
    [self.navigationItem setLeftBarButtonItem:nil animated:YES];
}

@end

Gardez à l'esprit que OS 3.2 ne pas offrir un soutien adéquat pour une SPLITVIEW en vue TabBar.

Vous pouvez le faire « travailler », mais il aura des bugs - le plus important est qu'un changement d'orientation fait sur le point de vue d'un autre onglet souvent ne se propage pas à la vue de l'onglet SPLITVIEW correctement, ce qui rend la vue aller loufoque quand vous allez revenir (vue latérale gauche reprend l'écran ou l'élément barbutton manque, etc.).

Je suis arrivé à la conclusion que je dois créer mon propre SPLITVIEW à utiliser dans un tabBarController à cause de cette question.

J'avais entendu des rumeurs que Apple travaillait sur un correctif, mais il a été mois et aucune mise à jour iPad OS se sont produits -. Peut-être OS 4 pour l'iPad remédier

Vous pouvez utiliser IB pour construire et modifier Tabtab onglets pour splitviewcontroller.

-(void) makeSplitViewController {
NSMutableArray *controllers = [NSMutableArray arrayWithArray:tabBarController.viewControllers];
int index = 0;

for (UIViewController *controller in tabBarController.viewControllers) {
    if ([controller.tabBarItem.title isEqualToString:@"Stock"]) {
        stockDetailController = [[StockDetailController alloc] initWithNibName:@"StockDetailController" bundle:nil];

        stockMasterController = [[StockMasterController alloc] initWithStyle:UITableViewStylePlain]; 
        stockMasterController.navigationItem.title = date;
        stockMasterController.stockDetailController = stockDetailController;

        UINavigationController *nav = [[[UINavigationController alloc] initWithRootViewController:stockMasterController] autorelease];

        splitViewController = [[UISplitViewController alloc] init];
        splitViewController.tabBarItem = controller.tabBarItem;
        splitViewController.viewControllers = [NSArray arrayWithObjects:nav, stockDetailController, nil];
        splitViewController.delegate = stockDetailController;

        [controllers replaceObjectAtIndex:index withObject:splitViewController];
    }

    index++;
}

tabBarController.viewControllers = controllers;

}

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top