2013-01-12 4 views
5

Ich möchte Folgendes ausführen:
, wenn ich auf den Statusleisteneintrag klicke (NSStatusItem) Ich möchte ihn (kein Menü) auf unbestimmte Zeit markieren und wenn die Anwendung den Fokus verliert, möchte ich aufhören, sie hervorzuheben.

Gibt es eine Möglichkeit, dies zu tun? Ich kann es nicht finden, tbh.Gibt es eine Möglichkeit, das Statusleistenelement programmgesteuert hervorzuheben?

+2

Wenn ich eine Anwendung gesehen habe, würde ich denken, dass sie zwischen Highlight und Unhighlight hängt oder zumindest nicht die Standard-Event-Schleife verwendet. Wenn Sie angeben möchten, dass Ihr Fenster sichtbar ist, sollten Sie das Symbol Ihres Elements ändern. –

Antwort

2

Sie können dies wahrscheinlich mit einer benutzerdefinierten Ansicht tun, die sends the status item a drawStatusBarBackgroundInRect:withHighlight: message.

Ich bezweifle, dass es keine Möglichkeit gibt, es ohne eine benutzerdefinierte Ansicht zu tun, da, wie ich in meinem Kommentar zu der Frage erwähnt, das Element markiert, wenn der Benutzer nicht mit der Maus auf es sieht schlecht aussieht.

+1

die Sache ist: Ich habe eine NSWindow (kein Popover), die direkt unter dem Statusleiste Element angezeigt wird (wenn geklickt). Also, was ich tun möchte, ist das NSMenu-Verhalten nachzuahmen: Ich klicke auf die Statusleiste, das Fenster wird angezeigt und das Element wird hervorgehoben, wenn die App den Fokus verliert, verschwindet das Fenster und das Element geht in den normalen Zustand über. –

+0

@ PedroVieira: Klingt vernünftig. Wenn ich das tun würde, würde ich eine benutzerdefinierte Ansicht erstellen, wie ich sie in meiner Antwort beschrieben habe. –

+0

Pedro, ich stehe jetzt genau vor dem gleichen Problem. Würde es Ihnen etwas ausmachen zu erzählen, wie Sie Peters Lösung implementiert haben? Prost. –

2

Alte Frage, aber ich denke, es lohnt sich, diese alternative Antwort hinzuzufügen.

Dies wird nicht automatisch hebt sie, wenn die Anwendung den Fokus verliert, aber dies ermöglicht es Ihnen, ohne eine benutzerdefinierte Ansicht zu markieren (wie die other answer erfordert):

NSStatusItem *statusItem = [self getStatusItem]; 
[statusItem.button setHighlighted:YES]; 

können Sie hebt sie es die manuell mit gleiche Methode:

[statusItem.button setHighlighted:NO]; 

Hinweis bekam ich diese Antwort aus einer ähnlichen Frage here.

Verwandte Themen