Voici un fragment de code d'un de mes projets. Fondamentalement, si le popover est en cours d'affichage, vous présenter à nouveau le popover dans la méthode didRotateFromInterfaceOrientation:
, qui est envoyé au contrôleur de vue après la rotation de l'interface utilisateur a eu lieu. (Les willRotate...
et willAnimateRotation...
méthodes sont appelées avant la rotation a eu lieu, il est au mauvais endroit pour l'appel de méthode presentPopover...
.)
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
// if the popover is showing, adjust its position after the re-orientation by presenting it again:
if (self.myPopoverController != nil) // if the popover is showing (replace with your own test if you wish)
{
[self.myPopoverController presentPopoverFromRect:attachmentRect
inView:myView
permittedArrowDirections:UIPopoverArrowDirectionUp
animated:YES];
}
}
Dans ce qui précède, self.myPopoverController
est une propriété de mon contrôleur de vue où Je stocke une référence à la popover quand elle est créée. Quand je rejette et rejette le popover dans des circonstances normales, je prends soin de mettre cette propriété à nil
, donc je peux le vérifier pour 'non nil
' pour déterminer si le survol est montré ou non.
Notez toutefois que vous n'avez pas besoin d'ignorer le popover avant la rotation. Présentez simplement le même popover à nouveau. (C'est là maintenant une référence au popover est très pratique.)
Dans votre cas, où le popover émane d'un bouton de la barre d'outils, vous pouvez utiliser quelque chose comme ce qui suit à la place:
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
// if the popover is showing, adjust its position after the re-orientation by presenting it again:
if (self.myPopoverController != nil) // if the popover is showing (replace with your own test if you wish)
{
[self.myPopoverController presentPopoverFromBarButtonItem:barButtonItem
permittedArrowDirections:UIPopoverArrowDirectionAny
animated:YES];
}
}
Malheureusement, je ne peux rien obtenir pour déclencher la méthode willRotate de mon contrôleur de vue, où je rejeterais normalement le popover. J'aurais pensé que ça s'appellerait n'importe quoi. –
Je pense aussi à cette solution que je n'arrive pas à faire. :( –