2013-03-06 3 views
0

Je suis en train de construire l'interface pour une application qui ressemble à ceci: image of appComment structurer ViewControllers en utilisant Storyboard pour l'application iPad SplitView?

Je veux utiliser le storyboard pour créer les vues, mais je vais avoir du mal à comprendre comment maintenant. J'ai laissé tomber un SplitViewController qui est relié à deux contrôleurs de navigation: MasterNavigationController, et DetailNavigationController (Master est le menu de gauche et Détail le côté droit).

Je commençais à construire tous mes ViewControllers dans le storyboard. Puis construisez NSArrays pour contenir les différentes piles ViewController nécessaires pour chacun des éléments de menu du Master. Ainsi, lorsqu'un utilisateur tape sur un élément de menu, je charger la pile ViewController correspondante dans le DetailNavigationController en utilisant cette méthode:

- (void)setViewControllers:(NSArray *)viewControllers animated:(BOOL)animated 

Mais maintenant, je pense, je créer une DetailNavigationController distincte pour chacun des menus articles. Par exemple:

  • RecentOrdersNavigationController
  • CustomersNavigationController
  • ItemsNavigationController
  • ...

Ensuite, lorsqu'un utilisateur tape un élément de menu, la totalité de DetailNavigationController à celui qui convient.

Comment dois-je structurer l'interface tout en utilisant le storyboard?

Répondre

0

Utilisez un viewController distinct pour chaque vue détaillée. Vous voulez que votre code soit séparé car il peut être déroutant rapidement avec toutes les fonctionnalités différentes pour chaque vue. De là, vous pouvez facilement échanger les détails.

Sous-classe UISplitViewController et définissez votre racine splitViewController sur cette classe. Ensuite, ajoutez cette méthode à votre sous-classe UISplitViewController:

-(void)setDetailControllerTo:(UIViewController *)detailController withNavControllerTitle:(NSString *)title { 
[detailController view]; // this line forces the viewDidLoad method to be called 

if (title) { 
    UINavigationController *navController = [[UINavigationController alloc] init]; 
    [navController pushViewController:detailController animated:YES]; 
    detailController.title = title; 

    NSArray *[email protected][self.mainController.viewControllers[0],navController]; 
    self.mainController.viewControllers = viewControllers; 
} else { 
    NSArray *[email protected][self.mainController.viewControllers[0],detailController]; 
    self.mainController.viewControllers = viewControllers; 
} 

}

Pour appeler cette méthode faire quelque chose comme ceci du contrôleur de vue maître dans le tableView: didSelectRowAtIndexPath: méthode

FixedSplitViewController *splitController = (FixedSplitViewController*) self.splitViewController; 

CurrentEventViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"CurrentEventViewController"]; 
// add any setup code here 
[splitController setDetailControllerTo:controller withNavControllerTitle:@"Current Event"]; 

Si vous vous souhaitez conserver la vue principale visible en rotation portrait, ajoutez cette méthode à la sous-classe SplitViewController:

-(BOOL)splitViewController:(UISplitViewController *)svc shouldHideViewController:(UIViewController *)vc inOrientation:(UIInterfaceOrientation)orientation { 
    return NO; 
} 

Un grand nombre de mes projets nécessitent que le splitviewcontroller affiche toujours la vue principale. J'utilise donc cette sous-classe pour empêcher la vue masquée de se déplacer en mode portrait.

Questions connexes