Question

J'utilise un UISplitViewController intérieur d'un UITabBarController avec un UIViewController brut dans le volet principal de la vue de scission et un UINavigationController dans le volet de détail, qui contient lui-même un UIViewController de vanille.

Je suis conscient du fait que conseiller Apple pour utiliser des vues fractionnées au niveau racine, mais je l'ai vu d'autres applications (par exemple, onglet Amazon- « Wish List ») utilisant les vues fractionnées dans des onglets, donc je suis sûr qu'il est possible.

Mon problème est que les méthodes de délégué de la vue fractionnée, à savoir. ceux UISplitViewControllerDelegate ne sont pas appelés, ce qui me empêche de créer mon pop-over le menu lors du passage en mode Portrait.

Les méthodes en question sont les suivantes: -

// Called when a button should be added to a toolbar for a hidden view controller
- (void)splitViewController: (UISplitViewController*)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem*)barButtonItem forPopoverController: (UIPopoverController*)pc;

// Called when the view is shown again in the split view, invalidating the button and popover controller
- (void)splitViewController: (UISplitViewController*)svc willShowViewController:(UIViewController *)aViewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem;

// Called when the view controller is shown in a popover so the delegate can take action like hiding other popovers.
- (void)splitViewController: (UISplitViewController*)svc popoverController: (UIPopoverController*)pc willPresentViewController:(UIViewController *)aViewController;

Le UISplitViewController ne recevoir les notifications de rotation.

Je peux obtenir le willShowViewController méthode à appeler si je force l'orientation de la barre d'état à droite du paysage (ou gauche) au début du lancement de l'application, en utilisant

 [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight];

Cependant, l'willHideViewController ne soit pas appelé. Et je ne veux pas forcer l'application à commencer dans le paysage. Si je fais la même chose que la force à portrait, je ne reçois pas les callbacks.

Je ne comprends pas pourquoi le contrôleur de vue partagé ne l'appeler de méthodes de délégué lorsqu'il est autrement comporte correctement. Ces méthodes doivent être appelées à partir de sa méthode -

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 

en interne, et quand je l'intérieur de ce point d'arrêt, je peux vérifier que le délégué est réglé et qu'il est encore en vie.

Been collé sur toute la journée! Tout le reste fonctionne bien et je suis très heureux que le SPLITVIEW / TabBar / navbar combinaison fonctionne bien. J'ai juste besoin de ces notifications.

Devrais-je peut-être juste les appeler manuellement quand je tourne? Il semble très mal lorsque le devrait faire ce `UISplitViewController ».

Était-ce utile?

La solution

Résolu, il doit être soit au niveau de la racine ou une sous-vue directe d'un tabBar qui doit également être au niveau de la racine. ! Annoying

Autres conseils

Tout d'abord, essayez de voir si vous définissez les délégués corrects. par exemple, permet de dire que vous avez créé trois contrôleurs,

UISplitViewController* splitView;
UIViewController* masterView;
UIViewController* detailView;

Vous avez mis en œuvre le protocole de délégué à la vue détaillée, de sorte que lorsque les changements d'orientation, vue détaillée devrait être en mesure de mettre un bouton dans la barre d'outils.

Pour SPLITVIEW appeler cette fonction de délégué, vous devez définir le délégué lui-même.

Alors quelque part, si vous manquez l'appel suivant,

splitView.delegate = detailView;

DetailView de sera jamais informé de l'orientation des changements, etc. Au moins c'est là que je suis coincé.

I comme le procédé suivant de l'envoi d'un message du maître UIViewController au UIViewController détail. Quelque part dans la mise en œuvre du maître:

id detailViewController = [[self.splitViewController viewControllers] lastObject];
[detailViewController setSomeProperty:…];

est de la chute de Paul Hegarty 2011 Stanford iTunesU iPad et iPhone cours de développement d'applications.

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