Почему не 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: вызывается.

Другие вопросы по тегам