2013-01-12 22 views
5

Mi piacerebbe eseguire le seguenti operazioni:
quando clicco sulla voce barra di stato (NSStatusItem) voglio evidenziarlo (senza menu) a tempo indeterminato e quando l'applicazione perde lo stato attivo voglio smettere evidenziandolo.

C'è un modo per farlo? Non riesco a trovarlo, tbh.C'è un modo per evidenziare la voce della barra di stato in modo programmatico?

+2

Se vedessi un'applicazione fare questo, penserei che fosse appeso, o almeno non usando il ciclo degli eventi standard, tra l'evidenziazione e la luce ineguale. Se vuoi indicare che la tua finestra è visibile, devi cambiare l'icona del tuo articolo. –

risposta

2

Probabilmente è possibile farlo con una vista personalizzata che sends the status item a drawStatusBarBackgroundInRect:withHighlight: message.

Dubito che ci sia un modo per farlo senza una visualizzazione personalizzata, dal momento che, come ho accennato nel mio commento sulla domanda, mantenere l'elemento evidenziato quando l'utente non ha il mouse premuto sembra brutto.

+1

il fatto è: ho un NSWindow (nessun popover) che apparirà proprio sotto l'elemento della barra di stato (quando cliccato). Quindi, quello che voglio fare è imitare il comportamento di NSMenu: clicco sulla barra di stato, la finestra viene mostrata e l'oggetto è evidenziato, quando l'app perde il fuoco, la finestra scompare e l'oggetto passa allo stato normale. –

+0

@PedroVieira: Sembra ragionevole. Se lo facessi, creerei una vista personalizzata come quella che ho descritto nella mia risposta. –

+0

Pedro, sto affrontando esattamente lo stesso problema adesso. Ti dispiacerebbe condividere come hai implementato la soluzione di Peter? Saluti. –

2

Vecchia domanda, ma penso che valga la pena di aggiungere questa risposta alternativa.

Questo non automaticamente unhighlight quando l'applicazione perde lo stato attivo, ma questo permette di evidenziare senza l'utilizzo di una visualizzazione personalizzata (come il other answer richiede):

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

È possibile togliere l'evidenziatura utilizzando manualmente il stesso metodo:

[statusItem.button setHighlighted:NO]; 

Nota ho ottenuto questa risposta da una domanda simile here.