Закрытие UIPopoverController на изменение ориентации

Чтобы избежать, чтобы огромная стычка с ужасным UI дала незначительный сбой от представления легкой сдобы после неожиданного вращения, я просто хочу отклонить легкую сдобу в целом, когда это происходит. Однако по любой причине, различным уведомлениям об ориентации, таким как (пустой) willRotateToInterfaceOrientation:duration: не становитесь позвонившими, когда они будут расположены в легкой сдобе. Это мешает закрывать магазин в viewController той легкой сдобы.

a) Почему уведомления об ориентации не происходят в легкой сдобе viewControllers?

b) Что лучший способ состоит в том, чтобы иметь дело с этими вращениями и необходимыми увольнениями?

1
задан Greg Combs 5 July 2010 в 23:19
поделиться

2 ответа

Обычно ваш главный контроллер представления должен получить уведомление, чтобы вы могли предпринять действия, чтобы заставить другие ваши контроллеры представления выполнять соответствующие действия, в процессе будет регистрироваться для уведомлений о ротации устройства с помощью всплывающего окна и обрабатывать его таким образом.

1
ответ дан 2 September 2019 в 23:17
поделиться

У меня нет ответа на вопрос (a) выше, но у меня есть рабочее решение, которое может быть применимо к (b)...

Поскольку один из моих popovers - это что-то вроде "Main Menu", я сохранил его в appDelegate. AppDelegate не получает уведомлений о "повороте интерфейса", как таковых, но он слышит об изменении ориентации строки состояния...

- (void)application:(UIApplication *)application willChangeStatusBarOrientation:(UIInterfaceOrientation)newStatusBarOrientation duration:(NSTimeInterval)duration {
    // a cheat, so that we can dismiss all our popovers, if they're open.

    if (menuPopoverPC) {
        // if we're actually showing the menu, and not the about box, close out any active menu dialogs too
        if (menuPopoverVC && menuPopoverVC == menuPopoverPC.contentViewController)
            [menuPopoverVC.popoverController dismissPopoverAnimated:YES];
        [menuPopoverPC dismissPopoverAnimated:YES];
        menuPopoverPC = nil;
    }
}

Кроме того, я выяснил одну маленькую хитрость: когда вы делаете эти всплывающие меню в стиле Show/Hide, часто у вас не так много возможностей для очистки после всех увольнений. Это иногда приводит к тому, что пользователю приходится дважды нажимать на кнопку меню, чтобы открыть его. То есть, если вы не настроили свой контроллер как UIPopoverControllerDelegate, то добавьте следующее:

- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController {
    // the user (not us) has dismissed the popover, let's cleanup.
    menuPopoverPC = nil;
}
1
ответ дан 2 September 2019 в 23:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: