我正在尝试为Mac应用程序(不是iOS应用程序)创建自定义“更改字体”NSPopupButton。我可以检测到字体选择的变化:
long fontItemIndex = [fontPopup indexOfSelectedItem];
NSMenuItem *fontItem = [fontPopup itemAtIndex:(int)selectedFontItemIndex];
NSString *fontName = [selectedFontItem title];
鉴于此字体名称的NSString,我似乎无法找到如何将我的NSTextView textView
中的选定文本实际更改为此新字体。
我只是被official documentation弄得眼花缭乱:似乎convertFont:toFamily:
是我需要的。当我这样做时:
NSFont *font = [NSFont fontWithName:fontName size:12.0];
[textView setFont:font];
它设置文本视图中的所有文本,而不仅仅是所选文本。但是当我这样做时:
NSFontManager *fontManager = [NSFontManager sharedFontManager];
[fontManager convertFont:[fontManager selectedFont] toFamily:fontName];
它没有做任何事情。我错过了什么?
答案 0 :(得分:4)
NSTextView
内部是NSTextStorage
(NSAttributedString
的子类),您必须修改名为NSFontAttributeName
的属性。
首先获取要更改字体属性的范围:
NSRange selection = textView.selectedRange;
现在将font属性添加到选择中:
NSFont *font = [NSFont fontWithName:fontName size:12.0f];
[self.textView.textStorage addAttributes:@{NSFontAttributeName: font}
range:selection];
根据NSPopUpButton
的内容,只需使用fontWithName:size:
作为字体名称调用title
即可获得刚刚选择的字体。但是,如果您已经执行的方法不起作用,则可能必须从字体系列名称中获取特定字体。 availableMembersOfFontFamily:
上的NSFontManager
会为您提供所有可用字体的列表。您可以使用其中一个来初始化特定字体。
答案 1 :(得分:0)
查看NSText
上的setFont:range:
方法,NSTextView
的超类。
(范围当然来自NSTextView
上的selectedRanges
属性。)
答案 2 :(得分:0)
这就是我需要更改textview中的所有文本。
[textview setFont:[NSFont fontWithName:@"Courier" size:14]];