ValidModesforFontPanel никогда не вызывается
-
28-10-2019 - |
Вопрос
У меня есть приложение, в котором я использую NSFontPanel
Анкет Я открываю панель шрифта так:
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
В этом респонденте, поэтому, если нет другого респондента, о котором я не знаю, я не знаю, что происходит с этим сообщением.
У кого-нибудь есть предложения?
Решение
Вы не указываете ни на один респондент для панели, только для менеджера.
это должно это сделать:
NSFontPanel* fontPanel = [fontManager fontPanel:YES];
[fontPanel setDelegate:self];
[fontPanel makeKeyAndOrderFront:sender];