带有实时字体的NSPopupButton(样式文本)

时间:2013-06-22 06:18:11

标签: objective-c macos cocoa osx-mountain-lion nspopupbutton

我想知道是否可以在弹出按钮控件( NSPopupButton )中显示实时字体?目前,我按以下方式加载了一个弹出按钮,其中包含可用的字体列表。

NSArray *familyNames = [[NSFontManager sharedFontManager] availableFontFamilies];
NSMutableArray *fontarray = [[NSMutableArray alloc] initWithObjects:nil];
[fontarray addObject:@"- Select one - "];
for (NSString *family in familyNames) {
    [fontarray addObject:family];
}
[fontmenu1p addItemsWithTitles:fontarray];

也许,如下所示,使用NSMutableAttributedString?

for (NSString *family in familyNames) {
    NSDictionary *attr1 = [NSDictionary dictionaryWithObjectsAndKeys:[NSFont fontWithName:family size:[NSFont systemFontSize]],NSFontAttributeName,[NSColor blackColor],NSForegroundColorAttributeName,nil];
    NSMutableAttributedString *aString = [[NSMutableAttributedString alloc] initWithString:family];
    [aString setAttributes:attr1 range:NSMakeRange(0,family.length-1)];
    [fontarray addObject:aString];
}
[fontmenu1p addItemsWithTitles:fontarray];

我出错了。我不知道我的做法是否正确。我甚至不知道弹出按钮控件是否支持样式文本。

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

我认为即使我没有测试它,我们的方法也行不通。 NSPopUpButton为其菜单提供了方便的API。方便,但很短。 (通常不会弹出弹出项目,也不会显示单独的视图等。)

我会尝试为每个项目构建NSMenuItem的实例。有一个setter -setAttributedTitle:,可让您设置属性字符串。然后,您必须将此聚合到弹出按钮的NSMenuset the menu实例。

BTW:[aString setAttributes:attr1 range:NSMakeRange(0,family.length-1)]; 为什么-1?长度是长度,而不是最后一个char的索引。并且你想设置一个范围,它取长度,而不是最后一个字符的索引。