1

在我的应用程序中,我将 NSWindow 子类化并将窗口级别设置为 25。由于窗口级别为 25,因此窗口隐藏了警报框和错误对话框。

有没有机会设置 NSAlert 的级别

4

2 回答 2

4

首先。你不应该使用像 25 这样的幻数。

有一种设置窗口级别的方法,但它没有用,因为runModal使用固定windowLevel常量kCGModalPanelWindowLevel8。您可以像这样验证它:

[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

解决方案:

  1. 使用表

    [alert beginSheetModalForWindow:self.window completionHandler:^(NSModalResponse response){ }];
    
  2. runModal用你自己的实现混搭。

  3. 将功能重新创建NSAlertNSWindow/的子类NSPanel(不要继承NSAlert),showWindow:如果需要显示它,请调用它。

于 2015-09-29T11:11:16.137 回答
0

你可以做到这一点,但这是一个非常糟糕的组合。诀窍是在启动 runModal运行一些代码并设置警报窗口的级别。您在调用runModal后执行以下操作以重新设置级别NSAlert

dispatch_async(dispatch_get_main_queue(), ^{
    [[NSApp modalWindow] setLevel:myLevel];
});
于 2020-04-20T05:50:59.417 回答