【问题标题】:NSPopupButton with Live Fonts (Styled Text)带有实时字体的 NSPopupButton(样式文本)
【发布时间】:2013-06-22 06:18:11
【问题描述】:

我想知道是否可以在弹出按钮控件 (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];

我得到一个越界错误。我不知道我的方法是否正确。我什至不知道popupbutton控件是否支持样式文本。

感谢您的帮助。

【问题讨论】:

  • 你从哪里得到越界错误?
  • 我认为这是最后一行。我不能确切地说,因为有一百多种字体要遵循。谢谢。
  • 我的第一个想法是 fontarray 可能是空的。事实上,它不是。如果我计算项目的数量,我会得到 348。事实上,如果我用 NSLog 显示其中一个对象,我会得到以下信息。 Arial Blac{ NSColor = "NSCalibratedWhiteColorSpace 0 1"; NSFont = "\"Arial-Black 13.00 pt. P [] (0x100528bc0) fobj=0x101b36150, spc=4.34\"";所以我猜 NSPopupButton 不能显示样式文本?好吧,您可以使用 VisualBasic/C# 来完成。所以我想我可以用 Objective-C 来做。

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


【解决方案1】:

即使我没有测试它,我认为我们的方法也行不通。 NSPopUpButton 的菜单有一个方便的 API。方便,但很短。 (通常弹出项目没有属性,没有单独的视图等。)

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

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

【讨论】:

  • 嗯...我首先将大小设置为family.length。看到错误后,我将其更改为family.length - 1。我不确定。感谢您指出这一点。
  • 当然:您遇到了索引问题,首先要做的是减少范围。但我不认为这是问题所在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-17
  • 1970-01-01
  • 1970-01-01
  • 2011-12-06
  • 1970-01-01
  • 2013-06-28
相关资源
最近更新 更多