52 votes

UISplitViewController programmtically sans plume/xib

J'ai l'habitude de créer mes projets sans IB-stuff. La première chose que je fais est d'enlever toutes les références à xibs, de points de vente mis à jour plist, etc et ainsi de suite. Pas de problèmes, fonctionne très bien (dans mon monde)!

Maintenant, je viens d'installer 3.2, et a essayé de développer ma première application iPad. En suivant la même procédure qu'avant, j'ai créé un UISplitView application basée sur le projet et dépouillé de tous IB-stuff. Aussi, j'ai suivi la section d'Apple dans la référence docs: la Création d'un Split-Vue-Contrôleur par programme, mais néanmoins, le Maître-vue n'est jamais montré, seulement le Détail de la vue est (peu importe ce que l'orientation est). J'ai vraiment essayé de regarder attentivement ce travers, mais je ne comprends pas ce que j'ai manqué.

Est-il un exemple de travail d'un UISplitViewController sans les plumes flottant autour de quelque part? J'ai cherché sur google mais impossible de trouver toutes les. Ou savez-vous ce que j'ai probablement raté?

62voto

Nik Burns Points 2330

Déclarer votre splitviewcontroller dans votre délégué de l'en-tête, utiliser quelque chose comme ceci dans votre didfinishlaunching

vous assurer d'ajouter de la UISplitViewControllerDelegate à la detailedViewController fichier d'en-tête et que vous avez le délégué des méthodes aswell. n'oubliez pas d'importer pertinentes fichiers d'en-tête

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

splitViewController = [[UISplitViewController alloc] init];

rootViewController *root = [[[rootViewController alloc] init] autorelease];
detailedViewController *detail = [[[detailedViewController alloc] init] autorelease]; 

UINavigationController *rootNav = [[[UINavigationController alloc] initWithRootViewController:root]autorelease];

UINavigationController *detailNav = [[[UINavigationController alloc] initWithRootViewController:detail] autorelease];

splitViewController.viewControllers = [NSArray arrayWithObjects:rootNav, detailNav, nil];
splitViewController.delegate = detail;


[window addSubview:splitViewController.view];

[window makeKeyAndVisible];

return YES;

}

//detailedView delegate methods
- (void)splitViewController:(UISplitViewController*)svc 
     willHideViewController:(UIViewController *)aViewController 
          withBarButtonItem:(UIBarButtonItem*)barButtonItem 
       forPopoverController:(UIPopoverController*)pc
{  
    [barButtonItem setTitle:@"your title"];



    self.navigationItem.leftBarButtonItem = barButtonItem;
}


- (void)splitViewController:(UISplitViewController*)svc 
     willShowViewController:(UIViewController *)aViewController 
  invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem
{
    self.navigationItem.leftBarButtonItem = nil;
}

Je préfère aussi le code de l'IB ;-)

24voto

Scott Honji Points 206

Un peu vieux thread, mais je pensais que je serais de rechange lecteur de temps + le chagrin quand la technique ci-dessus ne parvient pas à produire un UISplitViewController qui répond correctement à l'appareil changement d'orientation d'événements. Vous aurez besoin de:

  1. S'assurer que toutes les actions subalternes à vue de répondre correctement à shouldAutorotateToInterfaceOrientation. Rien de nouveau ici.
  2. Plutôt que d'ajouter la UISplitViewController la vue de la fenêtre principale,

    [window addSubview:splitViewController.view];   // don't do this
    

    au lieu de définir la fenêtre principale de la racine du contrôleur à la UISplitViewController:

    [self.window setRootViewController:(UIViewController*)splitViewController];  // that's the ticket
    

L'ajout de la splitviewcontroller est vue comme une sous-vue de la fenêtre principale (à peine) lui permet de co-présenter avec le frère de vues, mais il n'a pas voler avec UISplitViewController prévu de cas d'utilisation. Un UISplitViewController est un highlander vue; il peut seulement être un.

3voto

ziqian hu Points 31

Je venais de rencontrer le même problème. assurez-vous que votre enfant viewController d'écran à double affichage splitview peuvent tourner automatiquement à l'interface de l'orientation.

vous pouvez modifier la fonction dans votre childViewController comme ceci:

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return YES;
}

alors le maître de la vue seront affichés.

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