如何以编程方式关闭Safari App Extension popover?

Aar*_*ary 11 macos xcode popover swift safari-app-extension

我正在使用XCode 8.3和Swift 3构建Safari App扩展,遵循Safari App Extension编程指南.扩展程序包括单击扩展程序工具栏项时显示的弹出窗口.弹出窗口视图包含一些链接到用户可以执行的操作的按钮.

我想在执行操作后单击其中一个按钮来关闭弹出窗口.默认情况下,单击弹出窗口外的任何位置会关闭它,但我无法在指南或文档中找到任何其他方法来关闭弹出窗口.

我知道NSPopover有一个performClose方法,但似乎没有办法从扩展中访问popover本身:app扩展只允许你提供一个SFSafariExtensionViewController,其内容神奇地出现在popover中.

我也试过使用这个StackOverflow答案中dismissViewController所描述的,但在我的视图中控制器总是为零,并且只是使用消息崩溃扩展:self.presentingself.dismissViewController(self)

dismissViewController:: Error: maybe this view controller was not presented?.

最后,我注意到一个相关的问题,关于以编程方式打开工具栏项目popover在过去的6个月里没有得到答复.这让我怀疑苹果可能只是严格限制弹出窗口的打开和关闭方式.即使是这种情况,也很高兴知道这些限制是什么.

小智 0

我通过调用解雇方法来做到这一点,如下所示

@IBAction func onLoginBtnClicked (_ sender: Any) {
    NSLog("Button clicked")
    self.dismiss(self)
}
Run Code Online (Sandbox Code Playgroud)