Как NSFontManager addFontTrait изменяет фактический шрифт в элементе пользовательского интерфейса

Я хочу достичь того же, что и [[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 и как это можно воспроизвести

0 ответов

Вот немного хитрый способ сделать это. Диспетчер шрифтов проверяет тег отправителя, так что он просто должен совпадать с тегом в окнеEdit меню

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

Это также работает с NSButton, или, возможно, любой элемент управления с тегом. Это также означает, что вы можете сделать это, не написав ни строчки кода. Просто добавьте кнопку в раскадровку, добавьтеNSFontManagerкак объект в вашей сцене. Подключите кнопку к объекту Font Manager и выберитеaddFontTrait:

Я не понял, как убрать жирный шрифт таким образом. Меню окна может это сделать.

Другие вопросы по тегам