NSFontManager addFontTrait如何改变UI元素的实际字体



我想只使用我的代码实现与[[NSFontManager sharedFontManager] addFontTrait:(nullable id)sender]相同的事情

文档说明

This action method causes the receiver to send its action 
message up the responder chain.
By default, the action message is changeFont:.
When a responder replies by providing a font to convert in
a convertFont: message, the receiver converts the font by 
adding the trait specified by sender. This trait is determined 
by sending a tag message to sender and interpreting it as a font 
trait mask for a convertFont:toHaveTrait: message.

所以我试过

NSFontManager * fm = [NSFontManager sharedFontManager];
NSFont * font = [fm selectedFont];
NSFont * modifiedFont = [fm convertFont:font toHaveTrait:NSFontItalicTrait];
[fm setSelectedFont:modifiedFont isMultiple:YES];
[NSApp sendAction:@selector(changeFont:) to:fm.target from:fm];

[[self.window firstResponder] tryToPerform:@selector(changeFont:) with:modifiedFont];

但显然我漏掉了一些点

NSFontManager中的实际实现如何改变NSTextField的字体以及如何复制

这是一种略显粗糙的方法。字体管理器检查发件人的标签,所以只需要匹配一个在窗口的Edit菜单

let bold = NSMenuItem()
bold.tag = 2
NSFontManager.shared.addFontTrait(bold)

这也适用于NSButton,或者可能是任何带有标记的控件。这也意味着您无需编写一行代码即可完成此操作。只需在故事板中添加一个按钮,将NSFontManager添加为场景中的对象。连接按钮到字体管理器对象,并选择addFontTrait:

我还没弄清楚怎么用这种方式去粗体。窗口菜单能够做到这一点。

相关内容

  • 没有找到相关文章

最新更新