在我的应用程序中,我已经将NSWindow子类化,并将窗口级别设置为25.由于窗口级别为25,因此窗口隐藏了警告框和错误对话框。
是否有机会设置NSAlert的等级
答案 0 :(得分:3)
首先。你不应该使用像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) po [alert.window valueForKey:@"level"]
8
#define NSModalPanelWindowLevel kCGModalPanelWindowLevel
解决方案:
使用表格
[alert beginSheetModalForWindow:self.window completionHandler:^(NSModalResponse response){
}];
Swizzle实现runModal和你自己的。
将NSAlert功能重新创建为NSWindow / NSPanel的子类(不要继承NSAlert)并调用showWindow:如果需要显示它。
答案 1 :(得分:0)
您可以执行此操作,但这是一个很大的麻烦。诀窍是在runModal
启动后运行一些代码 并设置警报窗口的级别。在进行runModal
之后,请调用NSAlert
重新设置电平。
dispatch_async(dispatch_get_main_queue(), ^{
[[NSApp modalWindow] setLevel:myLevel];
});