是否有一种方法可以强制NSPopover以分离状态启动?我只看到isDetached
,它是弹出框状态的只读属性,还有一个NSPopoverDelegate方法detachableWindow(forPopover:)
,它使我可以覆盖创建的窗口。我实际上想单击一个按钮,并使NSPopover在此照片的状态下启动。
此窗口的样式恰好是产品的要求,我似乎找不到任何NSWindow样式设置来使窗口做类似这样的事情(也没有NSPanel)
这种独立的弹出框功能在其中似乎很特别:
答案 0 :(得分:2)
这是诀窍。
使用所需的委托方法detachableWindowForPopover:
为您完成工作,例如:
- (void) showPopoverDetached
{
NSWindow* detachedWindow = [self detachableWindowForPopover:nil];
[detachedWindow.windowController showWindow:nil];
}
似乎苹果工程师以一种非常聪明的方式实现了detachableWindowForPopover:
,我猜它使用了内容视图控制器类,并且将始终创建类似于独立窗口实例的单例。
一旦detachableWindowForPopover:
调用了所呈现的窗口实例,无论何时何地被调用,都将被重复使用,直接(从上面的示例中的函数)或间接(例如,当您拖出,分离,从其原始位置弹出)
这样,它们可以防止弹出窗口“两次”分离,我们还可以以编程方式实现分离的方法,这对他们来说是一件好事!
答案 1 :(得分:1)
如果您不介意调用私有API,实际上非常简单:
let detach = NSSelectorFromString("detach")
if popover.responds(to: detach) {
popover.perform(detach)
}
甚至无需添加委托。我不知道何时添加此私有方法,但至少自macOS 10.13起可用。不过,我怀疑自NSPopover
推出以来就可以使用它。