gpt4 book ai didi

objective-c - 在 Objective-C 中更改所选文本的字体

转载 作者:行者123 更新时间:2023-12-03 17:31:44 24 4
gpt4 key购买 nike

我正在尝试为 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];

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

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

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

最佳答案

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

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

NSRange selection = textView.selectedRange;

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

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

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

关于objective-c - 在 Objective-C 中更改所选文本的字体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15168953/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com