6 Stimmen

Wie kann die Schriftart von NSMenu/NSMenuItems festgelegt werden?

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.

8voto

mrwalker Punkte 1853

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

8voto

Ramy Al Zuhouri Punkte 21190

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];

4voto

Stéphane Bruckert Punkte 19776

+ 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];

1voto

Nickolay Olshevsky Punkte 12838

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X