Я создаю расширение приложения Safari с помощью XCode 8.3 и Swift 3, следуя инструкциям по программированию расширения приложений Safari. Расширение включает в себя popover, который появляется при нажатии элемента панели расширения. Поперечное представление содержит несколько кнопок, связанных с действиями, которые пользователь может выполнить.
Я хочу нажать одну из этих кнопок, чтобы закрыть popover после того, как действие было выполнено. По умолчанию щелчок в любом месте за пределами popover закрывает его, но я не смог найти другого способа закрыть popover, как в руководстве, так и в документах.
Я знаю, что у NSPopover есть метод performClose
, но не существует способа получить доступ к самому popover изнутри расширения: расширение приложения позволяет вам предоставить SFSafariExtensionViewController, содержимое которого волшебным образом появляется внутри popover.
Я также попытался использовать dismissViewController
как описано в qaru.site/info/8858680/..., но, на мой взгляд, контроллер self.presenting
всегда равен нулю, а self.dismissViewController(self)
просто сбрасывает расширение с помощью сообщения:
dismissViewController:: Error: maybe this view controller was not presented?
,
Наконец, я заметил, что связанный с этим вопрос о программном открытии элемента панели инструментов остался без ответа за последние 6 месяцев. Это заставляет меня подозревать, что Apple может просто иметь строгие ограничения на то, как можно открывать и закрывать popover. Даже если это так, было бы хорошо знать, каковы ограничения.