Как получить ссылку на UIPopoverController при использовании адаптивного segue?

В моем приложении iOS 7 я обнаружил, что segue был popover через эту проверку в prepareForSegue:

if ([segue isKindOfClass:[UIStoryboardPopoverSegue class]])

Но теперь, когда я использую адаптивные последовательности, настоящее как Popover segue больше не возвращает true в вышеупомянутой проверке. Это связано с тем, что segue больше не является UIStoryboardPopoverSegue, а является UIStoryboardPopoverPresentationSegue. Однако нельзя просто добавить слово Presentation, потому что это не определено.

Каким образом можно определить, когда segue является popover из адаптивного segue, в отличие от полноэкранного модального представления?

И, , как вы получаете ссылку на popover для iOS 8? Следующее - это то, что я делаю для iOS 7, но опять же, потому что это не UIStoryboardPopoverSegue, это приведет к сбою.

UIPopoverController *popover = ((UIStoryboardPopoverSegue *)segue).popoverController;
popover.popoverContentSize = CGSizeMake(380, 1000);

Ответы

Ответ 1

На самом деле не было необходимости получать ссылку на popover для iOS 8. Вы можете получить доступ к popoverPresentationController непосредственно в отображаемом контроллере представлений. Затем используйте dismissViewControllerAnimated для отклонения контроллера вида. Вы можете установить размер содержимого popover непосредственно в контроллере представления, который отображается через preferredContentSize. Я обнаружил, что мне не нужно было получать ссылку в prepareForSegue, по крайней мере, при работе на iOS 8. iOS 7 - это другая история.

Ответ 2

Разрабатывая ответ Джой, который привел меня к тому, что кажется новым способом достижения того, что мы использовали с UIPopoverController.

Этот код в prepareForSegue:Sender:

        UIViewController *destination = segue.destinationViewController;
        UIPopoverPresentationController *ppc = destination.popoverPresentationController;
        ppc.delegate = self;

- простой способ успешно настроить ваш контроллер представления как делегата UIPopoverPresentationController так же, как вы, вероятно, привыкли делать со старым UIPopoverController.

И, конечно, пока вы на нем, вы, вероятно, добавите:

[destination setPreferredContentSize:CGSizeMake(300.00f, 300.00f)];

если вы привыкли устанавливать размер UIPopoverController здесь.

Ответ 3

Это может быть не самый надежный способ сделать это, но вы можете проверить свойство popoverPresentationController на вашем контроллере представления назначения. Оттуда вы можете настроить якорь поппора и т.д.

Отметьте раздел "Настройка всплывающего окна для отображения" в документе UIPopoverPresentationController. (Не уверен, если мы позволим связать с ними в этот момент, не так ли?)

Обратите внимание, что теперь мы говорим о контроллерах UIPopover * Presentation *, а не UIPopoverControllers. Это немного запутывает...