在我的应用程序中,我将 NSWindow 子类化并将窗口级别设置为 25。由于窗口级别为 25,因此窗口隐藏了警报框和错误对话框。
有没有机会设置 NSAlert 的级别
在我的应用程序中,我将 NSWindow 子类化并将窗口级别设置为 25。由于窗口级别为 25,因此窗口隐藏了警报框和错误对话框。
有没有机会设置 NSAlert 的级别
首先。你不应该使用像 25 这样的幻数。
有一种设置窗口级别的方法,但它没有用,因为runModal
使用固定windowLevel
常量kCGModalPanelWindowLevel
8。您可以像这样验证它:
[self.window setLevel:25];
NSAlert *alert = [NSAlert alertWithMessageText:@"1" defaultButton:@"2" alternateButton:nil otherButton:nil informativeTextWithFormat:@"3"];
[alert runModal];
(lldb) 宝
[alert.window valueForKey:@"level"]
8
#define NSModalPanelWindowLevel kCGModalPanelWindowLevel
解决方案:
使用表
[alert beginSheetModalForWindow:self.window completionHandler:^(NSModalResponse response){ }];
runModal
用你自己的实现混搭。
将功能重新创建NSAlert
为NSWindow
/的子类NSPanel
(不要继承NSAlert
),showWindow:
如果需要显示它,请调用它。
你可以做到这一点,但这是一个非常糟糕的组合。诀窍是在启动后 runModal
运行一些代码并设置警报窗口的级别。您在调用runModal
后执行以下操作以重新设置级别NSAlert
。
dispatch_async(dispatch_get_main_queue(), ^{
[[NSApp modalWindow] setLevel:myLevel];
});