Ich kann nicht herausfinden, wie ich die Schriftart/das Styling meiner NSMenuItems in meinem NSMenu festlegen kann. Ich habe die setFont-Methode im NSMenu ausprobiert, aber sie scheint keine Wirkung auf die Menüpunkte zu haben. NSMenuItem scheint keine setFont-Methode zu haben. Ich würde gerne möchten, dass alle die gleiche Schriftart/Style haben, also hoffe ich, dass es irgendwo nur eine Eigenschaft gibt, die ich setzen kann.
Antworten
Zu viele Anzeigen?NSMenuItem unterstützt attributierte Zeichenfolgen als Titel:
- (void)setAttributedTitle:(NSAttributedString *)string;
Beispielcode:
NSMenuItem *menuItem = [[NSMenuItem alloc] initWithTitle:@"Hi, wie geht es dir?" action:nil keyEquivalent:@""];
NSDictionary *attributes = @{
NSFontAttributeName: [NSFont fontWithName:@"Comic Sans MS" size:19.0],
NSForegroundColorAttributeName: [NSColor greenColor]
};
NSAttributedString *attributedTitle = [[NSAttributedString alloc] initWithString:[menuItem title] attributes:attributes];
[menuItem setAttributedTitle:attributedTitle];
Dokumentation: https://developer.apple.com/library/mac/#documentation/cocoa/reference/applicationkit/classes/nsmenuitem_class/reference/reference.html
Sie können einen attributierten Titel haben, sodass Sie einen attributierten String als Titel mit all seinen Attributen, einschließlich Schriftart, festlegen können:
NSMutableAttributedString* str =[[NSMutableAttributedString alloc]initWithString: @"Titel"];
[str setAttributes: @{ NSFontAttributeName : [NSFont fontWithName: @"meineSchriftart" size: 12.0] } range: NSMakeRange(0, [str length])];
[label setAttributedString: str];
+ menuBarFontOfSize:
von NSFont
ist hier dein Freund.
- Wenn du nicht vorhast, die Schriftart zu ändern, solltest du
[NSFont menuBarFontOfSize:12]
verwenden, um die Standard-Schriftart zu erhalten und eine neue Größe festzulegen. - Wenn du nur die Farbe änderst, musst du die Standardschriftgröße trotzdem zurücksetzen, indem du
[NSFont menuBarFontOfSize:0]
verwendest.
Also um nur die Farbe des NSMenuItem
zu ändern:
NSDictionary *attributes = @{
NSFontAttributeName: [NSFont menuBarFontOfSize:0],
NSForegroundColorAttributeName: [NSColor greenColor]
};
NSAttributedString *attributedTitle = [[NSAttributedString alloc] initWithString:[menuItem title] attributes:attributes];
[menuItem setAttributedTitle:attributedTitle];
Eigentlich funktioniert [NSMenu setFont:]
für alle Menüelemente Untermenüs (wenn letztere keine eigene Schriftart haben). Vielleicht haben Sie den formatierten Titel gesetzt, bevor Sie die Menüschriftart festgelegt haben? Mir ist das aufgefallen, nachdem ich mein eigenes Verfahren zum Durchlaufen der Menüelemente geschrieben hatte.
Falls Sie eine benutzerdefinierte Verarbeitung benötigen (z. B. Ändern der Schriftart nicht für alle Elemente oder Anpassen für verschiedene Elemente), hier ist ein einfacher Iterationscode:
@implementation NSMenu (MenuAdditions)
- (void) changeMenuFont:(NSFont*)aFont
{
for (NSMenuItem* anItem in self.itemArray)
{
NSDictionary *attrsDictionary = [NSDictionary dictionaryWithObject:aFont forKey:NSFontAttributeName];
anItem.attributedTitle = [[[NSAttributedString alloc] initWithString:anItem.title attributes:attrsDictionary] autorelease];
if (anItem.submenu)
[anItem.submenu changeMenuFont:aFont];
}
}
@end