带有字体系列列表的 NSPopButton
NSPopButton with list of font families
如何创建一个带有字体系列列表的 NSPopupButton,其中每个项目都有自己的字体,如所附屏幕截图所示。我想使用绑定来实现这一点。
我可以通过将 NSPopupButton 内容绑定到 [[NSFontManager sharedFontManager] availableFontFamilies]
返回的值来填充 NSPopupButton,但我不知道如何让每一行都使用自己的字体?
我不确定我是否能做到,但以下似乎可行。
// 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];
如何创建一个带有字体系列列表的 NSPopupButton,其中每个项目都有自己的字体,如所附屏幕截图所示。我想使用绑定来实现这一点。
我可以通过将 NSPopupButton 内容绑定到 [[NSFontManager sharedFontManager] availableFontFamilies]
返回的值来填充 NSPopupButton,但我不知道如何让每一行都使用自己的字体?
我不确定我是否能做到,但以下似乎可行。
// 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];