2011-01-19 19 views
16

Esta es una respuesta, en lugar de una pregunta. La búsqueda en línea, sólo he encontrado una muy cortado, retorcido respuesta a esta pregunta (http://www.cocoabuilder.com/archive/cocoa/58379-changing-the-text-color-of-an-nsmenuitem-in-an-nspopupbutton.html), que se puede responder de manera más elegante de esta manera:Cómo establecer el color de NSPopupButton Elemento de menú

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

Tenga en cuenta que 'setAttributedTitle' se introdujo en 10.3, que sólo estaba disponible en 2003, que es * * después que los intercambios de correo electrónico lo refirió a. Entonces eso era lo único que podían hacer. – Yuji

+0

excelente! ligeramente modificado también funciona bien para agregar una imagen simple a cada elemento del menú. – Miek

+0

Un problema con este enfoque es que parece que no se puede aplicar un estilo al estado resaltado con texto 'inverso' con este enfoque. He estado tratando de encontrar una manera de hacer esto sin ir a vistas personalizadas en un 'NSMenu'. Hasta ahora sin suerte. –

Respuesta

3

Sólo una nota aquí que la pregunta anterior es de hecho la respuesta. Hay muchos enlaces en la web con soluciones demasiado complejas basadas en API antiguas y pensé que sería útil escribir esta publicación como referencia.

+14

Así no es como funciona este sitio. Si quiere responder su propia pregunta, se supone que debe fingir que está en Jeopardy y formularla en forma de pregunta. Consulte [Preguntas frecuentes] (http://stackoverflow.com/faq) para obtener más información. –

+0

Curiosamente, el tamaño de la fuente es aún demasiado pequeño. Para obtener una mejor coincidencia con los artículos regulares, tuve que usar '[NSFont menuFontOfSize: 14.0]'. – nschum

0

Acabo de recibir el mismo problema.

Para preservar los atributos de texto original, mi solución está aquí:

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]; 
} 
Cuestiones relacionadas