0

我正在尝试为 Mac 应用程序(不是 iOS 应用程序)创建一个自定义的“更改字体”NSPopupButton。我可以检测到字体选择的变化:

long fontItemIndex = [fontPopup indexOfSelectedItem];
NSMenuItem *fontItem = [fontPopup itemAtIndex:(int)selectedFontItemIndex];
NSString *fontName = [selectedFontItem title];

鉴于此字体名称的 NSString,我似乎无法找到如何将 NSTextView 中的选定文本实际更改textView为这种新字体。

我只是被官方文档弄得眼花缭乱:这似乎convertFont:toFamily:是我所需要的。当我这样做时:

NSFont *font = [NSFont fontWithName:fontName size:12.0];
[textView setFont:font];

它设置文本视图中的所有文本,而不仅仅是选定的文本。但是当我这样做时:

NSFontManager *fontManager = [NSFontManager sharedFontManager];
[fontManager convertFont:[fontManager selectedFont] toFamily:fontName];

它没有做任何事情。我错过了什么?

4

3 回答 3

4

a 内部NSTextView是 a NSTextStorage(的子类NSAttributedString),您必须修改名为 的属性NSFontAttributeName

首先获取要更改字体属性的范围:

NSRange selection = textView.selectedRange;

现在将字体属性添加到选择中:

NSFont *font = [NSFont fontWithName:fontName size:12.0f];
[self.textView.textStorage addAttributes:@{NSFontAttributeName: font}
  range:selection];

根据您的内容,NSPopUpButton它应该足以作为字体名称调用fontWithName:size:title获取刚刚选择的字体。但是,如果您已经使用的方法不起作用,您可能必须从字体系列名称中获取特定的字体。availableMembersOfFontFamily:onNSFontManager将为您提供所有可用字体的列表。您可以使用其中之一来初始化特定字体。

于 2013-03-07T10:42:17.203 回答
0

看一下setFont:range:方法NSText,超类NSTextView

(当然,范围来自 上的selectedRanges属性NSTextView。)

于 2013-03-02T04:07:22.587 回答
0

这就是我更改文本视图中所有文本所需的全部内容。

[textview setFont:[NSFont fontWithName:@"Courier" size:14]];
于 2016-04-25T21:52:44.383 回答