Почему не changeFont: вызывается из моего NSFontPanel? - PullRequest
4 голосов
/ 27 мая 2011

Я создаю 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 Ответ

3 голосов
/ 28 мая 2011

Я нашел ответ (http://www.cocoabuilder.com/archive/cocoa/108016-nsfontpanel-act-on-it-own-accessory-view.html#108136). Я добавил эту строку:

[[NSFontManager sharedFontManager] setAction:@selector(changeDefaultFont:)];

и внес соответствующие изменения в имя метода в моем NSWindowController подклассе. Теперь, когда я выбираю другой* на панели шрифтов вызывается changeDefaultFont:.

...