2011-01-19 28 views
16

Đây là câu trả lời, chứ không phải là câu hỏi. Tìm kiếm trực tuyến, tôi chỉ tìm thấy một thực sự bị hack, câu trả lời cho câu hỏi này méo mó (http://www.cocoabuilder.com/archive/cocoa/58379-changing-the-text-color-of-an-nsmenuitem-in-an-nspopupbutton.html), có thể được trả lời tao nhã hơn như vậy:Cách đặt màu của mục menu NSPopupButton

NSArray *itemArray = [scalePopup itemArray]; 
int i; 
NSDictionary *attributes = [NSDictionary 
          dictionaryWithObjectsAndKeys: 
          [NSColor redColor], NSForegroundColorAttributeName, 
          [NSFont systemFontOfSize: [NSFont systemFontSize]], 
          NSFontAttributeName, nil]; 

for (i = 0; i < [itemArray count]; i++) { 
    NSMenuItem *item = [itemArray objectAtIndex:i]; 

    NSAttributedString *as = [[NSAttributedString alloc] 
      initWithString:[item title] 
      attributes:attributes]; 

    [item setAttributedTitle:as]; 
} 
+0

Lưu ý rằng 'setAttributedTitle' được giới thiệu vào 10,3, mà chỉ là có sẵn vào năm 2003, đó là * sau * so với trao đổi email mà bạn đã gọi đến. Vì vậy, đó là điều duy nhất họ có thể làm. – Yuji

+0

tuyệt vời! hơi sửa đổi nó cũng hoạt động tốt để thêm một hình ảnh đơn giản cho mỗi mục trình đơn. – Miek

+0

Một vấn đề với phương pháp này là có vẻ như bạn không thể tạo kiểu cho trạng thái được đánh dấu bằng văn bản 'nghịch đảo' với phương pháp này. Tôi đã cố gắng tìm ra một cách để làm điều này mà không đi xem tùy chỉnh trong một 'NSMenu'. Cho đến nay không có may mắn. –

Trả lời

3

Chỉ cần một lưu ý ở đây là các câu hỏi ở trên là trong thực tế câu trả lời. Có rất nhiều liên kết trên web với các giải pháp quá phức tạp dựa trên các API cũ hơn và tôi nghĩ sẽ hữu ích khi viết bài đăng này làm tài liệu tham khảo.

+14

Đó không phải là cách trang web này hoạt động. Nếu bạn muốn trả lời câu hỏi của riêng mình, bạn phải giả vờ là bạn đang gặp nguy hiểm và cụm từ đó dưới dạng một câu hỏi. Xem [FAQ] (http://stackoverflow.com/faq) để biết chi tiết. –

+0

Thật kỳ lạ, kích thước phông chữ vẫn còn quá nhỏ. Để có được kết hợp tốt hơn với các mục thông thường, tôi phải sử dụng '[NSFont menuFontOfSize: 14.0]'. – nschum

0

Tôi vừa gặp vấn đề tương tự.

Để bảo tồn văn bản gốc thuộc tính, giải pháp của tôi là ở đây:

NSRange range = NSMakeRange(0, 0); 
NSAttributedString *cellStr = [[self.popup cell] attributedTitle]; 
NSMutableDictionary *cellAttr = [[cellStr attributesAtIndex:range.location effectiveRange:&range] mutableCopy]; 
[cellAttr setObject:[NSColor redColor] forKey:NSForegroundColorAttributeName]; 

NSArray *menuItems = [self.popup itemArray];  
for (NSMenuItem *menu in menuItems) { 
    NSString *orgTitle = [menu title]; 
    NSMutableAttributedString *title = [[NSMutableAttributedString alloc] initWithString:orgTitle attributes:cellAttr]; 

    [menuItem setAttributedTitle:title]; 
} 
Các vấn đề liên quan