我想知道是否可以在弹出按钮控件( 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];
我出错了。我不知道我的做法是否正确。我甚至不知道弹出按钮控件是否支持样式文本。
感谢您的帮助。
答案 0 :(得分:3)
我认为即使我没有测试它,我们的方法也行不通。 NSPopUpButton为其菜单提供了方便的API。方便,但很短。 (通常不会弹出弹出项目,也不会显示单独的视图等。)
我会尝试为每个项目构建NSMenuItem的实例。有一个setter -setAttributedTitle:,可让您设置属性字符串。然后,您必须将此聚合到弹出按钮的NSMenu和set the menu实例。
BTW:[aString setAttributes:attr1 range:NSMakeRange(0,family.length-1)]; 为什么-1?长度是长度,而不是最后一个char的索引。并且你想设置一个范围,它取长度,而不是最后一个字符的索引。