Kir*_*ova 5 macos cocoa nswindow nspopover swift
有没有办法强制NSPopover在分离状态下启动?我只看到isDetached哪个是弹出式窗口状态的只读属性,以及一个NSPopoverDelegate方法detachableWindow(forPopover:),该方法使我可以覆盖创建的窗口。我实际上想单击一个按钮,并使NSPopover在此照片的状态下启动。
此窗口的样式恰好是产品要求的样式,我似乎找不到任何NSWindow样式设置来使窗口执行类似这样的操作(也没有NSPanel)
这种分离的弹出框功能在以下方面看起来很特别:
如果你不介意调用私有 API,其实很简单:
let detach = NSSelectorFromString("detach")
if popover.responds(to: detach) {
popover.perform(detach)
}
Run Code Online (Sandbox Code Playgroud)
甚至不需要添加代表。我不知道这个私有方法是什么时候添加的,但至少从 macOS 10.13 开始它就可用了。不过,我怀疑自从推出以来它就可用了NSPopover。
这就是窍门。使用所需的委托方法detachableWindowForPopover:来为您完成工作,例如:
- (void) showPopoverDetached
{
NSWindow* detachedWindow = [self detachableWindowForPopover:nil];
[detachedWindow.windowController showWindow:nil];
}
Run Code Online (Sandbox Code Playgroud)
看来苹果工程师detachableWindowForPopover:以一种非常聪明的方式实现了,我猜它使用内容视图控制器类,并且总是会创建一个像分离窗口的单例实例。一旦detachableWindowForPopover:调用了呈现的窗口实例,无论何时以及为何调用它,都将重新使用它,直接调用它(从像我上面的示例的函数)或间接调用它(例如,当您从其原始位置拖出、分离、弹出窗口时) )
这样他们就可以防止弹出窗口“两次”分离,我们也可以通过编程实现分离方式,他们干得好!
这是一个关于它在现实生活中如何工作的小演示(在 macOS 10.13 - 13.0 上测试)
https://i.stack.imgur.com/hej75.jpg
| 归档时间: |
|
| 查看次数: |
380 次 |
| 最近记录: |