Я пытаюсь использовать панель шрифтов в своем приложении Cocoa, и я не могу получить метод changeFont :.NSFontPanel changeFont not called
У меня было это нормально работать в другом приложении, и я просто скопировал и вставил код, но по какой-то нечетной причине метод changeFont теперь не вызывается. Вот код:
- (IBAction)onOpenFontPanelBtnClicked:(id)sender
{
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
NSString* theFontName = [defaults objectForKey:DefaultFontNamePrefKey];
NSFont* theFont = [NSFont fontWithName:theFontName size:12.0f];
NSFontManager* fontMgr = [NSFontManager sharedFontManager];
[fontMgr setTarget:self];
[fontMgr setAction:@selector(changeMyCustomFont:)];
NSFontPanel* panel = [fontMgr fontPanel:YES];
[panel setPanelFont:theFont isMultiple:NO];
[panel orderFront:self];
panel.enabled = YES;
NSLog(@"Font manager target: %@ (class: %@), action: %@", fontMgr.target, [fontMgr.target className], NSStringFromSelector(fontMgr.action));
}
- (void) changeMyCustomFont:(id)sender
{
NSLog(@"New font: %@", [[NSFontManager sharedFontManager] selectedFont]);
}
Этот код вызывается из контроллера представления внутри модального окна (окна предпочтений) и панель шрифтов открывается просто отлично. Однако я не получаю никаких изменений, хотя я устанавливаю цель и действие вручную.
Эта проблема связана с цепочкой ответчиков? Как я могу это исправить? Нужно ли вручную добавить контроллер вида в цепочку ответчиков? Как мне это сделать?
Заранее благодарен!
Я не делал этого некоторое время, но установка цели/действия в общем диспетчере шрифтов означает, что для всего процесса может быть только один обработчик. Мне это не кажется правильным. – trojanfoe
Спасибо за ваш комментарий. Я добавил этот код, пытаясь исправить проблему. Таким образом, он также не работает, когда он удаляется. – guitarflow