NSFontManager addFontTrait 如何更改 UI 元素上的实际字体
How does NSFontManager addFontTrait change the actual font on the UI element
我想只使用我的代码
实现与[[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 上的字体以及如何重现
这里有一个稍微老套的方法。字体管理器检查发件人的标签,因此只需要与 window 的 Edit
菜单
中的标签相匹配
let bold = NSMenuItem()
bold.tag = 2
NSFontManager.shared.addFontTrait(bold)
这也适用于 NSButton
,或者可能是任何带有标签的控件。这也意味着您无需编写一行代码即可完成此操作。只需在情节提要中添加一个按钮,将 NSFontManager
作为对象添加到您的场景中。将按钮连接到字体管理器对象,然后选择 addFontTrait:
我还没有想出如何以这种方式去除粗体。 window 菜单可以做到这一点。
我想只使用我的代码
实现与[[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 上的字体以及如何重现
这里有一个稍微老套的方法。字体管理器检查发件人的标签,因此只需要与 window 的 Edit
菜单
let bold = NSMenuItem()
bold.tag = 2
NSFontManager.shared.addFontTrait(bold)
这也适用于 NSButton
,或者可能是任何带有标签的控件。这也意味着您无需编写一行代码即可完成此操作。只需在情节提要中添加一个按钮,将 NSFontManager
作为对象添加到您的场景中。将按钮连接到字体管理器对象,然后选择 addFontTrait:
我还没有想出如何以这种方式去除粗体。 window 菜单可以做到这一点。