2015-05-12 75 views
2

如何創建一個NSPopupButton,其中每個項目都有自己的字體,如附件屏幕截圖所示。我想用綁定來實現這一點。帶有字體系列列表的NSPopButton

我能夠通過將NSPopupButton內容綁定到由[[NSFontManager sharedFontManager] availableFontFamilies]返回的值來填充NSPopupButton,但我無法弄清楚如何獲取每個單獨的行以其自己的字體?

enter image description here

+0

如果必須使用綁定的,你可以有NSFont's的''一個和NSArray'創建一個'NSValueTransformer'創建'NSAttributedString'像[埃爾番茄的答案](HTTP://計算器。 com/a/30189936/573976)來自'NSFont'對象。 – Jesper

回答

3

我不知道我能做到這一點,但以下似乎工作。

// fontPopup1 is an instance of NSPopupMenu 
NSMenu *menu = [[NSMenu alloc] init]; 
NSArray *familyNames = [[NSFontManager sharedFontManager] availableFontFamilies]; 
NSMutableArray *fontArray = [[NSMutableArray alloc] initWithObjects:nil]; 
for (NSString *family in familyNames) { 
    [fontArray addObject:family]; 
} 
for (NSInteger i2 = 0; i2 < fontArray.count; i2++) { 
    NSString *family = [fontArray objectAtIndex:i2]; 
    NSMutableAttributedString *attrStr =[[NSMutableAttributedString alloc]initWithString:family]; 
    CGFloat fontSize = [NSFont systemFontSize]; 
    [attrStr addAttribute:NSFontAttributeName value:[NSFont fontWithName:family size:fontSize] range:NSMakeRange(0,family.length)]; 
    NSMenuItem *menuItem = [[NSMenuItem alloc] init]; 
    [menuItem setAttributedTitle:attrStr]; 
    [menu addItem:menuItem]; 
} 
[fontPopup1 setMenu:menu];