gpt4 book ai didi

objective-c - NSWindow 级别和模式对话框

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

我有一个应用程序需要在其他内容之上显示一个窗口。为了实现这一点,我在主窗口上调用 [window setLevel:NSStatusWindowLevel]

这工作正常,只是我无法从此窗口使用任何模式对话框或警报。问题似乎是 [NSWindow beginSheet...] 在目标模式窗口上内部调用 setLevel: ,其值低于 NSStatusWindowLevel,因此模式对话框显示在其父窗口后面。当从具有更高窗口级别的窗口使用 NSAlert 时,也会发生同样的情况,警报显示在后面。

我发现的唯一[丑陋]解决方法是继承 NSWindow,覆盖 setLevel: 并防止在这些模态窗口上设置较低级别的值,但这仅在我可以控制窗口时才有效,并且不能不适用于 NSAlerts。

是否有更优雅的解决方案可以从具有高窗口级别值的 NSWindow 显示模式对话框,并且也可以与 NSAlerts 一起使用?或者我将无法通过这种方法使用 NSAlert?

最佳答案

想到的一件事是检查 NSAlert 是否使用特殊的 NSWindow 子类,您可以在其上创建一个类别并 Hook setLevel: 通过 swizzling 的方法( here is an example 通过 swizzling 扩展现有方法)。也没有什么可以阻止您在普通的 NSWindow 子类中执行此操作。

我知道这不是您所希望的“优雅的解决方案”,但它是我唯一知道的解决方案。我认为它稍微优雅一点,因为您不必在整个程序中的任何地方插入自定义子类,但不太优雅,因为您使用看似错误的代码来扰乱 Objective-C 运行时。

关于objective-c - NSWindow 级别和模式对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20354874/

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