У меня есть приложение, в котором я использую NSFontPanel
. открыть панель шрифта так:validModesForFontPanel никогда не назывался
NSFontManager *fontManager = [NSFontManager sharedFontManager];
[fontManager orderFrontFontPanel:self];
[fontManager setDelegate:self];
[fontManager setTarget:self];
[fontManager setAction:@selector(changeFont:)];
Я тогда есть -(void)changeFont:(id)sender
метод, который реагирует на шрифт изменения в панели. Все это хорошо работает.
Теперь я хочу, чтобы отключить некоторые параметры шрифта, так что я реализовать validModesForFontPanel
метод протокола NSFontPanelValidation
:
- (NSUInteger)validModesForFontPanel:(NSFontPanel *)fontPanel {
NSLog(@"validModesForFontPanel");
return NSFontPanelFaceModeMask | NSFontPanelCollectionModeMask | NSFontPanelSizeModeMask;
}
Однако этот метод никогда не вызывается,. В документации говорится: «Это сообщение отправляется вверх по цепочке ответчик к первому ответчику, реализующего метод В идеале этот объект должен быть первым ответчиком установлено, что также реализует changeFont :..»
Я реализовать changeFont
в этом ответе, поэтому, если нет другого ответчика, о котором я не знаю, я не знаю, что происходит с этим сообщением.
Есть ли у кого-нибудь предложения?
Привет JPed, спасибо за Ваш ответ. Я понял, что все прошло через «NSFontManager», но, я думаю, я ошибся. В любом случае, код выше не работает, поскольку делегат NSFontPanel должен быть экземпляром 'NSWindowDelegate', а' self' является подклассом 'NSViewController'. Это дает мне предупреждение: 'предупреждение: отправка 'TextViewController * const __strong' в параметр несовместимого типа 'id'' –
pajevic
Привет. Мне было немного быстро, когда я сказал, что это не сработало. На самом деле это происходит, несмотря на то, что я получаю предупреждение. Это то, с чем вы столкнулись? – pajevic
Я, наконец, понял это. Предупреждение появилось, потому что мой класс не выполнял протокол NSWindowDelegate. Я просто хочу, чтобы все это было немного лучше документировано. В любом случае, спасибо за ваш ответ, он сделал трюк: D – pajevic