2

我有两个 NSWindows。级别 0 的窗口 A,级别 1 的窗口 B。我使用 B 作为浮动窗口。

在我将 A 作为模式窗口(即,将 runModalForWindow:A 消息发送到 NSApplication)之前,这将按预期工作。那么B总是在A之后。

有没有办法让 B 高于 A,即使 A 作为模式窗口运行?

非常感谢您的帮助。

4

4 回答 4

2

要将浮动窗口放在前面,请使用[myfloater setLevel: NSModalPanelWindowLevel+1].

其他人告诉您,您将无法与漂浮物互动,但我已经做到了,它对我有用。(我的浮动使用NSPanel“实用面板”样式而不是 plain NSWindow,但我不确定这是否重要。您可能还需要说[myPanel setWorksWhenModal: YES]。)

于 2015-04-30T20:09:26.107 回答
1

AFAIK 那是不可能的。

来自 Apple 类参考:

NSApplication runModalForWindow:

此方法同步运行指定窗口的模态事件循环。它显示指定的窗口,使其成为关键,启动运行循环,并处理该窗口的事件。(您不需要自己显示窗口。)当应用程序处于该循环中时,它不会响应任何其他事件(包括鼠标、键盘或窗口关闭事件),除非它们与窗口相关联。它也不执行任何与模态运行循环无关的任务(例如触发计时器)。换句话说,此方法仅消耗足够的 CPU 时间来处理事件并将它们分派到与模态窗口关联的操作方法。

鉴于此,您的窗口 A 将成为关键窗口,并将始终显示在应用程序的任何其他窗口之上。我认为这就是模态窗口应该如何工作的。

作为替代方案,您可以考虑使用NSPopover对用户有明确存在但不会强制您的应用程序进入模态状态的方法。

从 Apple 文档中查看此页面,了解有关您可以使用的各种选项的指南。

于 2012-07-24T00:22:24.813 回答
0

我认为如果您将窗口级别设置为 NSScreenSaverWindowLevel,它将始终位于顶部。

于 2012-07-24T00:19:39.570 回答
0

您可以使用orderFront:,orderFrontRegardlessorderFront:relativeTo:, 将 B 移动到 A 前面。但是不确定您可以在 B 中执行多少任务,因为 A 是模态的,您将无法与 B 交互。

于 2015-04-09T10:57:23.850 回答