6

NSMenu で NSMenuItems のフォント/スタイルを設定する方法がわかりません。NSMenu で setFont メソッドを試してみましたが、メニュー項目には何の効果もないようです。NSMenuItem には setFont メソッドがないようです。それらすべてに同じフォント/スタイルを持たせたいので、どこかに設定できるプロパティが1つだけあることを願っています。

4

4 に答える 4

8

NSMenuItem は、属性付き文字列をタイトルとしてサポートしています:

- (void)setAttributedTitle:(NSAttributedString *)string;

コード例:

NSMenuItem *menuItem = [[NSMenuItem alloc] initWithTitle:@"Hi, how are you?" 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];

ドキュメント: https://developer.apple.com/library/mac/#documentation/cocoa/reference/applicationkit/classes/nsmenuitem_class/reference/reference.html

于 2012-11-19T17:34:08.437 に答える
8

それらには属性付きのタイトルを付けることができるため、属性付きの文字列を、属性付きのすべてのフォントを含むタイトルとして設定できます。

NSMutableAttributedString* str =[[NSMutableAttributedString alloc]initWithString: @"Title"];
[str setAttributes: @{ NSFontAttributeName : [NSFont fontWithName: @"myFont" size: 12.0] } range: NSMakeRange(0, [str length])];
[label setAttributedString: str];
于 2012-11-19T17:35:54.593 に答える
4

+ menuBarFontOfSize:fromNSFontはあなたの友達です。

  • フォント ファミリを変更する予定がない場合は、 を使用[NSFont menuBarFontOfSize:12]して既定のフォントを取得し、新しいサイズを設定する必要があります。
  • 色のみを変更する場合でも、 を実行してデフォルトのフォント サイズに戻す必要があります[NSFont menuBarFontOfSize:0]

NSMenuItemしたがって、色のみを変更するには:

NSDictionary *attributes = @{
                              NSFontAttributeName: [NSFont menuBarFontOfSize:0],
                              NSForegroundColorAttributeName: [NSColor greenColor]
                            };

NSAttributedString *attributedTitle = [[NSAttributedString alloc] initWithString:[menuItem title] attributes:attributes];
[menuItem setAttributedTitle:attributedTitle];
于 2015-10-03T01:24:12.273 に答える
1

実際[NSMenu setFont:]には、すべてのメニュー項目のサブメニューで機能します (最後の項目に独自のフォントがない場合)。メニューフォントを設定する前に、属性付きのタイトルを設定したのではないでしょうか? メニュー項目を反復する独自の手順を作成した後、それを実現しました。

カスタム処理が必要な場合 (つまり、すべてのアイテムではないフォントを変更したり、別のアイテムに合わせてカスタマイズしたり) する場合は、単純な反復コードを次に示します。

@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
于 2014-02-25T09:35:34.567 に答える