目前从NSView弹出窗口

时间:2018-09-21 16:35:09

标签: swift macos cocoa popover

我制作了一个自定义CustomView.xib。它由CustomView.swift拥有,后者是NSView的子类。现在,只需添加NSView并将其类设置为CustomView,即可轻松在Storyboard中重用CustomView。问题是我在CustomView.xib中有一个按钮,并且每当单击它时,我都希望显示一个弹出式MyPopoverViewController。我在Google上搜索后发现,要显示弹出窗口,我需要使用以下方法:

gridOptions.sideBar

问题在于此方法仅可从NSViewController使用。但是我没有。我想从NSView触发弹出窗口。我现在应该怎么办?这应该是可能的,因为NSAlert在任何地方都可以使用,甚至不需要任何NSViewController作为参数。因此,应该有一种无需任何NSViewController即可显示弹出窗口的方法。

1 个答案:

答案 0 :(得分:1)

这是将现有视图控制器显示为弹出窗口的便捷方法。

听起来您要创建并显示一个新的弹出框。为此,您需要创建一个NSPopover对象。实际上,这是弹出窗口的控制器。

您的NSPopover具有contentViewController: NSViewController属性,而该属性具有view: NSView属性。这些是视图控制器和视图,它们将显示在弹出窗口中。

如何创建这些取决于您。您可以通过编程方式构建它们,但是如果这是嵌入在其他笔尖/ storyboard文件中的可重用视图,则建议在其自己的笔尖文件中定义popover视图和视图控制器,使NSPopover对象成为笔尖的所有者。然后,您需要显示这样的弹出窗口(用Safari编写):

let popover = NSPopover()
if Bundle.loadNibNamed(nibName: "MyViewPopover", owner: popover, topLevelObjects:nil) {
    ...
    popover.show(relativeTo: view.bounds, of: view, preferredEdge: NSRectEdgeMinX)