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

时间:2016-08-09 18:25:01

标签: cocoa nstextfield nstextview nsfontmanager

我希望仅使用我的代码

来实现与[[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上的字体以及如何再现

1 个答案:

答案 0 :(得分:1)

这是一种有点怪癖的方式。字体管理器会检查发件人的标签,因此只需匹配窗口的 def lego(): if userinput.get() == '3': if filesd['jdisk']['status'] == 'true': print('Laufwerk J: ist bereits belegt.') else: os.system('net use J: \\\\testpath\\testpath') filesd['jdisk']['status'] = 'true' luserinput = Label(root, text="Zeichen eingeben um Python-Befehl auszuführen:") userinput = Entry(root) lbutton = Button(root, text="Search", command=lego) 菜单中的标签即可。

Edit

这也可以用于let bold = NSMenuItem() bold.tag = 2 NSFontManager.shared.addFontTrait(bold) 或任何带有标签的控件。这也意味着您无需编写代码即可执行此操作。只需在情节提要中添加一个按钮,即可将NSButton添加为场景中的对象。将按钮连接到字体管理器对象,然后选择NSFontManager

我还没有弄清楚如何用这种方式消除粗体。窗口菜单可以执行此操作。