Aquí hay un fragmento de código de uno de mis proyectos. Básicamente, si se muestra el popover, se vuelve a presentar el popover en el método didRotateFromInterfaceOrientation:
, que se envía al controlador de vista después de que se haya realizado la rotación de la interfaz del usuario. (Los métodos willRotate...
y willAnimateRotation...
se llaman antes ha tenido lugar la rotación, por lo que es el lugar equivocado para la llamada presentPopover...
método.)
- (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];
}
}
En lo anterior, self.myPopoverController
es una propiedad de mi controlador de vista, donde Guardo una referencia al popover cuando se crea. Cuando descarto y desecho el popover en circunstancias normales, me ocupo de establecer esta propiedad en nil
, por lo que puedo verificar si no está nil
'ness para decidir si se muestra o no el popover.
Tenga en cuenta, sin embargo, que no necesita cerrar el popover antes de que se produzca la rotación. Solo presenta el mismo popover de nuevo. (Aquí es donde mantener una referencia a la popover viene muy bien.)
En su caso, en el que el popover emana de un botón de la barra, se usaría algo como lo siguiente en su lugar:
- (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];
}
}
Lamentablemente, no puedo hacer nada para desencadenar método willRotate mi punto de vista del controlador, donde estaría normalmente descartar el popover. Me hubiera imaginado que se llamaría sin importar qué. –
También pienso en esta solución que no puedo lograr. :( –