2011-07-27 11 views
7

Mam NSStatusItem i używam nadany ciąg do niego, ustawienie jest jako takie:Podświetlanie NSStatusItem z przypisywanego ciąg

[statusItem setAttributedTitle:as]; 

gdzie as jest mój nadany ciąg. Używam go do podświetlenia pewnych części przedmiotu, gdy spełnione są określone warunki, poprzez ich inne zabarwienie. Mój element statusu może mieć na przykład trochę czerwonego tekstu i trochę czarnego tekstu.

Problem polega na tym, że kiedy używam setAttributedTitle, a następnie klikam na status, kolory nie są odwrócone tak, jak chcę. Na przykład, gdy użyłem tylko setTitle, tekst jest czarny, gdy nie jest zaznaczony i zmienia się na biały po wybraniu. Teraz po prostu utrzymuje kolor, który ustawiłem.

Czy istnieje sposób, aby powiedzieć, aby odwrócić kolory po wybraniu? Jeśli nie, jak mogę to osiągnąć? Przepraszam, jestem początkujący w Objective-C.

+0

Czy próbowałeś dzwoniąc 'setHighlightMode: TAK '? – jtbandes

+0

@jtbandes: tak, ale to tylko wydaje się sterować niebieskim tłem, gdy jest podświetlone. – houbysoft

Odpowiedz

4

Wygląda na to jedyny sposób, aby to zrobić jest:

  • nie ustawisz menu dla statusItem użyciu setMenu:

  • zamiast użyć setAction:, zmienić kolor napisu, wyświetl menu, a następnie zmień kolor ponownie

Dla ins tance, użyć czegoś takiego:

[statusItem setAction:@selector(statusItemClicked)]; 

i wdrożenie metody statusItemClicked takiego:

- (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

można realizować następujące metody 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];