gpt4 book ai didi

cocoa - 多次使用 NSApplication runModalForWindow

转载 作者:行者123 更新时间:2023-12-03 17:50:03 24 4
gpt4 key购买 nike

我想知道是否允许使用 runModalForWindow() 启动多个模式循环。在我的应用程序中,我有以下设置:当用户在非模态窗口 A 中按下按钮 A 时,将使用 runModalForWindow() 打开模态窗口 B。在模态窗口 B 中,有一个按钮 B。如果用户按下该按钮 B,将使用 runModalForWindow() 打开模态窗口 C。当模态窗口 C 打开时,窗口 A 和 B 应阻止用户输入;当模态窗口 B 打开时,窗口 A 应被阻止。

这种方法可以与 runModalForWindow() 一起使用,但是我遇到了一个小问题,这让我想知道我在这里所做的事情是否被允许。当模态窗口 C 打开时,我实际上可以将模态窗口 B 移动到模态窗口 C 前面。B 不接受任何输入,但实际上可以移动到 C 前面。但是,窗口 A 永远不能移动到前面B(或C)的...它总是留在后台。

有人知道为什么 B 可以移到 C 前面,而 ​​A 永远不能移到 B 或 C 前面吗?是否允许多次使用runModalForWindow()?

最佳答案

模态窗口的 level 设置为 NSModalPanelWindowLevel。这是位于普通 window 前面的窗位。这就是为什么你不能将窗口 A 放在窗口 B 前面。

但是,窗口 B 和 C 都处于同一级别。因此,窗口服务器并不强制窗口 C 始终位于窗口 B 的前面。

您可以尝试通过将窗口 C 的级别设置为高于 NSModalPanelWindowLevel 来解决此问题,但这在一般情况下可能会出现问题。如果您将级别增加太多,它可能会出现在系统 UI 元素的前面,例如菜单栏或边框指示器(例如音量更改指示器)。

您还可以使用 addChildWindow(_:ordered) 将窗口 C 设为窗口 B 的子窗口。这将强制执行指定的顺序。它确实有一些副作用。例如,如果移动窗口 B,窗口 C 也会移动,以保持相对定位相同。

关于cocoa - 多次使用 NSApplication runModalForWindow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29489572/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com