在我的应用程序中,我将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)po [alert.window valueForKey:@"level"]
  
  8


#define NSModalPanelWindowLevel kCGModalPanelWindowLevel


解:


使用表

[alert beginSheetModalForWindow:self.window completionHandler:^(NSModalResponse response){ }];

用自己的方法混淆实现runModal
NSAlert功能重新创建为NSWindow / NSPanel的子类(不继承NSAlert),并在需要显示时调用showWindow:

关于objective-c - 设置 cocoa 中NSAlert的级别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32837468/

10-11 13:47