Вот фрагмент кода из одного из моих проектов. В основном, если всплывающее окно отображается, вы снова представляете popover в методе didRotateFromInterfaceOrientation:
, который отправляется контроллеру вида после, когда происходит поворот пользовательского интерфейса. (Методы willRotate...
и willAnimateRotation...
называется перед тем вращение имело место, так что это не место для вызова 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];
}
}
В вышеприведенном self.myPopoverController
это свойство моего контроллера вида где Я храню ссылку на popover, когда она создана. Когда я отклоняю и удаляю popover при нормальных обстоятельствах, я позабочусь о том, чтобы установить это свойство в nil
, поэтому я могу проверить его на «не nil
», чтобы решить, отображается ли popover.
Обратите внимание, что вам не нужно отклонять popover до того, как произойдет поворот. Просто представьте тот же самый popover снова. (Это где держать ссылку на пирог пригодится.)
В вашем случае, когда поповер исходит от кнопки на панели инструментов, можно использовать что-то вроде следующего вместо:
- (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];
}
}
К сожалению, я не могу получить что-либо, чтобы вызвать метод willRotate моего диспетчера view, где я обычно увольняю popover. Я бы подумал, что будет вызвано, несмотря ни на что. –
Я также думаю об этом решении, я не могу это сделать. :( –