Как получить ссылку на 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. Это немного запутывает...