Je voudrais rendre la vue popover visible lorsque l'utilisateur passe de la vue paysage à la vue portrait dans UIsplitView de l'iPad. Bien que l'utilisateur puisse la rendre visible en cliquant sur le bouton de la barre, je veux que cela soit automatisé pour le mode portrait.
Réponses
Trop de publicités?UISplitViewController envoie des messages à son délégué (UISplitViewControllerDelegate). Vous pouvez implémenter les méthodes de ce délégué pour afficher le popover. Vous pouvez faire quelque chose comme ceci dans votre code de "contrôleur de détail" :
#pragma mark -
#pragma mark UISplitViewControllerDelegate implementation
- (void)splitViewController:(UISplitViewController*)svc
willHideViewController:(UIViewController *)aViewController
withBarButtonItem:(UIBarButtonItem*)barButtonItem
forPopoverController:(UIPopoverController*)pc
{
[barButtonItem setTitle:@"Your 'popover button' title"];
self.navigationItem.leftBarButtonItem = barButtonItem;
}
- (void)splitViewController:(UISplitViewController*)svc
willShowViewController:(UIViewController *)aViewController
invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem
{
self.navigationItem.leftBarButtonItem = nil;
}
La réponse acceptée (en utilisant shouldAutorotateToInterfaceOrientation
) ne fonctionne pas pour moi. Soit il y a des artefacts de rotation (dans les simulateurs d'iPad 4.2 et 5.0), soit il ne s'affiche qu'au démarrage et jamais plus lors des rotations suivantes (le simulateur 4.3). Ce que j'ai fait à la place, c'est de créer une petite fonction d'aide :
- (void)showPopoverInPortrait {
if ([[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationPortrait) {
[self.masterPopoverController presentPopoverFromBarButtonItem:self.navigationItem.leftBarButtonItem
permittedArrowDirections:UIPopoverArrowDirectionAny
animated:YES];
}
}
et appeler ceci dans - (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
y - (void)viewDidLoad
à gérer également au démarrage.