2015-05-12 24 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];