2011-07-27 12 views
7

Tengo una NSStatusItem, y utilizo una cadena con atributos para ello, el ajuste es como tal:resaltado NSStatusItem con una cadena con atributos

[statusItem setAttributedTitle:as]; 

donde as es mi cadena con atributos. Lo uso para resaltar ciertas partes del elemento cuando se cumplen ciertas condiciones al colorearlas de manera diferente. Entonces, mi elemento de estado puede tener texto en rojo y texto en negro, por ejemplo.

Ahora el problema es que cuando uso setAttributedTitle y luego hago clic en el elemento de estado, los colores no se invierten como yo quiero. Por ejemplo, cuando utilicé solo setTitle, el texto es negro cuando no está seleccionado y cambia a blanco cuando se selecciona. Ahora solo conserva el color que configuré.

¿Hay alguna manera de indicarle que invierta los colores cuando se selecciona? Si no, ¿cómo puedo lograr esto? Lo siento, soy un principiante en Objective-C.

+0

¿Ha intentado llamar 'setHighlightMode: SÍ ¿? – jtbandes

+0

@jtbandes: sí, pero eso solo controla el fondo azul cuando está resaltado, parecería. – houbysoft

Respuesta

4

Parece que la única manera de hacer esto es:

  • no establecen un menú para la statusItem usando setMenu:

  • lugar, utilizar setAction:, cambiar el color de la cadena, muestre el menú, y luego cambie el color

For ins tancia, usar algo como:

[statusItem setAction:@selector(statusItemClicked)]; 

y poner en práctica el método statusItemClicked así:

- (void) statusItemClicked { 

    // change color of attributed string to its highlighted state here 

    [statusItem popUpStatusItemMenu:statusItemMenu]; // show the menu 
                // which used to be set 
                // using setMenu: 

    // change color of attributed string back its non-highlighted state here 
} 
2

se pueden implementar los siguientes métodos NSMenuDelegate:

- (void) menuWillOpen:(NSMenu *) aMenu { 
    // use an attributed string to set the title to your highlighted color 
} 


- (void) menuDidClose:(NSMenu *) aMenu { 
    // use an attributed string to set the title black 
} 

[statusItem setMenu:[self menu]]; 
[[self menu] setDelegate:self]; 
Cuestiones relacionadas