В текстовое меню, поставляемое системой, отправляется ряд сообщений, таких как changeFont: modifyFont: и addFontTrait: вверх по первой цепочке ответчиков, пока не достигнет NSTextView, например.Меню текста какао и изменение шрифтов в NSOutlineView
Я хотел бы расширить это, чтобы управлять стилями строк в моем NSOutlineView, но я только смог переопределить changeFont: в моем оконном контроллере и перехватить сообщение (возможно, это лучшее место для этого, но оно работает пока) , Это работает для изменения шрифтов, но другие элементы меню, такие как Bold, Bigger, Smaller, которые используют modifyFont: и addFontTrait: никогда не получают вызов в оконном контроллере, поэтому я не могу изменить их поведение для работы над контурным представлением. Интересно, что они отображаются в меню, но только changeFont: вызывается и, как я понимаю, мне нужно получить значение тега из NSMenuItem, который является отправителем методов modifyFont: и addFontTrait :.
Кто-нибудь знает, как реализовать эту функциональность, получив эти другие методы в любом месте? Благодаря!
Я пытаюсь реализовать это решение, чтобы увидеть, работает ли оно, но я не могу установить класс с помощью setFontManagerFactory из-за ошибки «Общий экземпляр NSFontManager уже существует. Игнорирование + [NSFontManager setFontPanelFactory:] ... ". Это вызвано из applicationWillFinishLaunching как указано в документах, но меня беспокоит ошибочное сообщение об ошибке, предполагающее, что я вызвал setFontPanelFactory, когда я вызвал setFontManagerFactory. Можете ли вы назвать этот метод в своем коде? Благодаря! –
GenericPtr
Вызов setFontManagerFactory перед NSApplicationMain работал для меня, и те методы, которые мне нужны, вызываются сейчас. Я должен уметь выяснить, как получить результаты, которые я хочу сейчас, хотя мне пришлось сделать что-то немного взломанное, чтобы заставить его работать. Благодаря! – GenericPtr
Я вижу то же, что и вы. Проблема в том, что диспетчер шрифтов ссылается от NIB MainMenu. Это должно быть загружено до того, как будут применены любые методы делегирования приложения, такие как '-applicationWillFinishLaunching:', потому что делегат приложения создается в NIB и также установлен в качестве делегата. Вам нужно будет сделать это в 'main()'. –