Zeigt ein modales NSWindow, ohne dass sich der andere windows-Anwendung
Ich habe eine NSStatusItem
das ist richtig, die Anzeige in der MenuBar. Eines der Elemente (beim anklicken) zeigt einen modalen NSWindow aus meiner Anwendung, die gemeint ist, führen Sie eine einmalige Aufgabe, die anschließend verschwinden. (ZB. der Benutzer gibt eine kleine Menge an text, klickt auf "Speichern", und der modal-NSWindow geht Weg.)
Das Problem tritt auf, wenn die Anwendung im hintergrund ausgeführt wird. Das modale Fenster richtig oben angezeigt wird, was auch immer die Anwendung im Vordergrund ausgeführt wird, aber, wenn der Benutzer klickt auf den "Speichern" - Schaltfläche, wird der rest der Anwendung ist windows auch aktiviert. Dies ist unerwünscht, da der Benutzer muss dann auf zurück klicken, zu welcher app Sie wurden mit Hilfe. (Die Zerstörung der Bequemlichkeit der NSStatusItem.) Ich bin die Anzeige der modal-Fenster mit:
[myWindow setFrame:finalRect display:YES animate:NO];
[myWindow setLevel:NSPopUpMenuWindowLevel];
[NSApp runModalForWindow:myWindow];
Gibt es eine Möglichkeit zu verhindern, dass Klicks/Ereignisse in meinem popup-Fenster aus, wodurch der rest der Anwendung aktiv? Oder ein Weg zu lassen NSApp weiß, dass diese Besondere panel muss nicht automatisch aktivieren, der rest der app? Danke!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erstellen, anstatt eine
NSWindow
erstellen Sie eineNSPanel
mit dem StilNSNonactivatingPanelMask
. Sie können dann nicht den üblichenmakeKeyAndOrderFront:
undorderOut:
to show/hide panel benötigt.NSApp ist beginModalSessionForWindow, runModalSession, endModalSession sind Methoden, die Sie brauchen.
Schau mal hier zum Beispiel, wie es zu benutzen:
Erstellen einer vollständig angepasste NSAlert
Einer Lösung von Ken Thomases auf der cocoa-dev-Liste vor ein paar Jahren sieht zutreffend auch hier:
Was in der Theorie erzählt die Anwendung, um sich zu verstecken und einblenden am unteren Rand des Fensters Stapel.
Könnte man auch abfangen der Maus-Klick-Ereignis und verwenden
[NSApp preventWindowOrdering]
Können Sie versuchen so etwas wie:
und wenn fertig: