Ecco un frammento di codice da uno dei miei progetti. In sostanza, se il popover viene visualizzato, si presenta nuovamente il popover con il metodo didRotateFromInterfaceOrientation:
, che viene inviato al controller di visualizzazione dopo il, la rotazione dell'interfaccia utente ha avuto luogo. (I metodi willRotate...
e willAnimateRotation...
sono chiamati prima rotazione ha avuto luogo, quindi è posto sbagliato per la chiamata presentPopover...
metodo.)
- (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];
}
}
In precedenza, self.myPopoverController
è una proprietà di mio controller vista in cui Conservo un riferimento al popover quando viene creato. Quando ignoro e scarto il popover in circostanze normali, ho cura di impostare questa proprietà su nil
, così posso controllarlo per 'non- nil
' ness per decidere se mostrare o meno il popover.
Nota, tuttavia, non è necessario chiudere il popover prima della rotazione. Basta presentare di nuovo lo stesso popover. (Questo è dove mantenere un riferimento al popover viene in aiuto.)
Nel tuo caso, in cui il popover emana da un pulsante della barra degli strumenti, si può usare qualcosa di simile al seguente invece:
- (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];
}
}
Purtroppo non riesco a ottenere nulla per attivare il metodo willRotate del mio controller di visualizzazione, in cui normalmente ignorerei il popover. Avrei pensato che sarebbe stato chiamato, non importa quale. –
Penso anche a questa soluzione che non riesco a farcela. :( –