2011-07-27 25 views
7

Tôi có một NSStatusItem, và tôi sử dụng một chuỗi gán cho nó, thiết lập là như vậy:Highlighting NSStatusItem với gán chuỗi

[statusItem setAttributedTitle:as]; 

nơi as là chuỗi do của tôi. Tôi sử dụng nó để làm nổi bật các phần nhất định của vật phẩm khi các điều kiện nhất định được đáp ứng bằng cách tô màu chúng một cách khác nhau. Vì vậy, mục trạng thái của tôi có thể có một số văn bản màu đỏ và một số văn bản màu đen, ví dụ.

Bây giờ vấn đề là, khi tôi sử dụng setAttributedTitle và sau đó nhấp vào mục trạng thái, màu sắc không bị đảo ngược như tôi muốn. Ví dụ: khi tôi chỉ sử dụng setTitle, văn bản màu đen khi không được chọn và thay đổi thành màu trắng khi được chọn. Bây giờ nó chỉ giữ màu tôi đặt nó.

Có cách nào để cho biết cách đảo ngược màu khi được chọn? Nếu không, làm thế nào tôi có thể đạt được điều này? Xin lỗi, tôi là người mới bắt đầu trong Objective-C.

+0

Các bạn đã thử gọi 'setHighlightMode: YES '? – jtbandes

+0

@jtbandes: có, nhưng điều đó chỉ kiểm soát nền màu xanh khi được đánh dấu, có vẻ như vậy. – houbysoft

Trả lời

4

Hình như cách duy nhất để làm điều này là:

  • không đặt một menu cho statusItem sử dụng setMenu:

  • thay vào đó, sử dụng setAction:, thay đổi màu sắc của chuỗi, hiển thị menu và sau đó thay đổi màu sắc trở lại

Ins ins tầm quan, sử dụng một cái gì đó như:

[statusItem setAction:@selector(statusItemClicked)]; 

Và thực hiện các phương pháp statusItemClicked như thế này:

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

bạn có thể thực hiện các phương pháp NSMenuDelegate sau:

- (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]; 
Các vấn đề liên quan