2012-11-19 48 views
4

我無法弄清楚如何在NSMenu中設置NSMenuItems的字體/樣式。我嘗試了NSMenu上的setFont方法,但它似乎對菜單項沒有任何影響。 NSMenuItem似乎沒有setFont方法。我希望他們都有相同的字體/樣式,所以我希望只有一個屬性可以在某處設置。如何設置NSMenu/NSMenuItems的字體?

回答

7

他們可以有一個屬性的標題,所以你可以設置一個屬性字符串作爲標題與所有它的歸屬,字體包括:

NSMutableAttributedString* str =[[NSMutableAttributedString alloc]initWithString: @"Title"]; 
[str setAttributes: @{ NSFontAttributeName : [NSFont fontWithName: @"myFont" size: 12.0] } range: NSMakeRange(0, [str length])]; 
[label setAttributedString: str]; 
+0

歸屬標題是做這件事的最好方法嗎?然後我必須迭代菜單並更改每個項目,並且每次添加一個新項目時,我都必須設置歸屬標題。 – JPC

+0

您可以編寫除了設置字符串值之外的個人setter,還設置font.Subclass NSTextField,如果您需要使用屬性執行復雜的事情。 –

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

+0

歸因標題做到這一點的最好方法是什麼?然後我必須迭代菜單並更改每個項目,並且每次添加一個新項目時,我都必須設置歸屬標題。我希望有一種方法來設置它一次 – JPC

+0

http://stackoverflow.com/questions/32426341/using-the-fontwithsize-api-with-san-francisco如何利用這與你的例子? –

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 
1

+ menuBarFontOfSize:NSFont這裏是你的朋友。

  • 如果您不打算更改字體系列,則應使用[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];