validModesForFontPanel никогда не вызывается - PullRequest
2 голосов
/ 20 февраля 2012

У меня есть приложение, в котором я использую 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:. »

Я внедряю changeFont в этом респонденте, поэтому, если нет другого респондента, о котором я не знаю, я не знаю, что происходит с этим сообщением.

У кого-нибудь есть предложения?

1 Ответ

3 голосов
/ 22 февраля 2012

Вы не указываете респондента для панели, только для менеджера.
это должно сделать это:

NSFontPanel* fontPanel = [fontManager fontPanel:YES];
[fontPanel setDelegate:self];    
[fontPanel makeKeyAndOrderFront:sender];    
...