J'ai une application Cocoa qui affiche une alerte modale d'application en utilisant la classe NSAlert
. Je voudrais que la fenêtre d'alerte flotte au-dessus de toutes les fenêtres des autres applications. Est-ce que cela peut être fait avec NSAlert
, ou ai-je besoin d'implémenter ma propre fenêtre?NSAlert peut-il être utilisé pour créer une fenêtre flottante?
Je ne sais pas si cela est important, mais l'application est une application agent (LSUIElement
est vrai) implémentée comme NSStatusItem
. (Pour plus d'informations sur l'application, y compris le code source, regardez <here>.)
Voici le code qui affiche l'alerte:
- (void)showTimerExpiredAlert {
[NSApp activateIgnoringOtherApps:YES];
NSAlert *alert = [[NSAlert alloc] init];
[alert setAlertStyle:NSInformationalAlertStyle];
[alert setMessageText:NSLocalizedString(@"Menubar Countdown Complete", @"Expiration message")];
[alert setInformativeText:NSLocalizedString(@"The countdown timer has reached 00:00:00.",
@"Expiration information")];
[alert addButtonWithTitle:NSLocalizedString(@"OK", @"OK button title")];
[alert addButtonWithTitle:NSLocalizedString(@"Restart Countdown...", @"Restart button title")];
NSInteger clickedButton = [alert runModal];
[alert release];
if (clickedButton == NSAlertSecondButtonReturn) {
// ...
}
}
J'ai essayé de mettre cela avant l'appel runModal
:
[[alert window] setFloatingPanel:YES];
J'ai aussi essayé ceci:
[[alert window] setLevel:NSFloatingWindowLevel];
Mais neit Elle fait que la fenêtre reste au-dessus des autres si je clique sur la fenêtre d'une autre application. Je suppose que runModal
ne respecte pas l'un ou l'autre de ces paramètres.
chaque fois runModal est appelé remet à zéro le niveau de la fenêtre, pas sûr si cela aide ... – cobbal