Ich habe eine Cocoa-Anwendung, die eine anwendungsmodale Warnung mit der Klasse NSAlert
anzeigt. Ich möchte, dass das Warnfenster über den Fenstern aller anderen Anwendungen schwebt. Kann dies mit NSAlert
geschehen, oder muss ich ein eigenes Fenster implementieren?
Ich weiß nicht, ob irgendetwas davon zählt, aber die Anwendung ist eine Agentenanwendung ( LSUIElement
ist wahr), die als NSStatusItem
implementiert ist. (Weitere Informationen zur App, einschließlich des Quellcodes, finden Sie & lt; here & gt; .)
Hier ist der Code, der die Warnung anzeigt:
%Vor% Ich habe versucht, dies vor dem Aufruf runModal
:
Ich habe es auch versucht:
%Vor% Aber keiner von denen lässt das Fenster über anderen bleiben, wenn ich auf das Fenster einer anderen Anwendung klicke. Ich vermute, dass runModal
nur keine dieser Einstellungen berücksichtigt.
Ich habe vor einer Weile mein Gehirn über genau dieses Ding ruiniert.
Der einzige Weg, wie ich das schaffen könnte, war, NSApplication abzuleiten und -sendEvent zu überschreiben. In -sendEvent, rufen Sie zuerst die Implementierung von super auf, dann machen Sie etwas wie folgt:
%Vor%Abgesehen davon, dass auch das nicht ganz makellos funktioniert hat - wenn man Apps wechselt - würde man das sowieso nie machen wollen, weil es ein eklatanter, primitiver Hack ist.
Also, es tut Ihnen leid, Ihre eigene Version von NSAlert zu schreiben. Wenn Ihnen diese Möglichkeit wirklich wichtig ist, würde ich einen Fehler melden. Es ist ziemlich seltsam, dass [[alertLevel] setLevel: someLevel] von NSApplication nicht beachtet wird und es eine Verschwendung ist, NSAlert mit all seinen netten kleinen automatischen Layout-Funktionen neu zu erstellen, nur um dies zu können. p>
Am Ende habe ich NSAlert
aufgegeben und stattdessen eine alarmistische NSWindow
von einer NIB geladen.
Hier ist der Code, der das Fenster anzeigt:
%Vor%Dies soll bewirken, dass es sich wie ein Alarm verhält, außer dass es auch schwebt und es nicht modal ist, also können Menüpunkte ausgewählt werden, während es hoch ist.
Gibt es noch etwas, was ich hätte tun sollen?