Почему не changeFont: вызывается из моего NSFontPanel?
Я создаю NSFontPanel
но выбор шрифта не вызывает changeFont:
метод.
У меня есть эти методы, определенные в NSWindowController
подкласс:
- (IBAction)showFontPanel:(id)sender {
[[NSFontPanel sharedFontPanel] makeKeyAndOrderFront:self];
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
NSFont *theFont = [NSFont fontWithName:[prefs stringForKey:iepFontName] size:[prefs floatForKey:iepFontSize]];
[[NSFontPanel sharedFontPanel] setPanelFont:theFont isMultiple:NO];
[[NSFontManager sharedFontManager] setDelegate:self];
}
- (void)changeFont:(id)sender {
NSLog(@"changeFont");
}
- (NSUInteger)validModesForFontPanel:(NSFontPanel *)fontPanel {
return NSFontPanelFaceModeMask | NSFontPanelSizeModeMask | NSFontPanelCollectionModeMask;
}
Панель шрифтов отображается с правильным шрифтом и выбранным размером, и только режимы, включенные в validModesForFontPanel:
, но когда я выбираю другой шрифт, changeFont:
метод не вызывается. Я понимаю, что changeFont:
сообщение действия отправляется по цепочке респондента. В качестве теста я поставил идентичный changeFont:
метод в моем делегате приложения (который должен быть в цепочке респондента), но он также не вызывается. Я где-то пропускаю шаг?
1 ответ
Я нашел ответ ( http://www.cocoabuilder.com/archive/cocoa/108016-nsfontpanel-act-on-it-own-accessory-view.html). Я добавил эту строку:
[[NSFontManager sharedFontManager] setAction:@selector(changeDefaultFont:)];
и сделал соответствующее изменение имени метода в моем NSWindowController
подкласс. Теперь, когда я выбираю другой шрифт на панели шрифтов, changeDefaultFont:
вызывается.