NSFontPanel change字体未调用



我正在尝试在我的Cocoa应用程序中使用字体面板,但我无法调用changeFont:方法。

让它在另一个应用程序中正常工作,我只是复制并粘贴了代码,但由于某种奇怪的原因,现在没有调用 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]);
}

此代码是从模式窗口(首选项窗口)内的视图控制器调用的,字体面板打开正常。但是,尽管我手动设置了目标和操作,但我没有得到任何更改。

此问题是否与响应程序链有关?我该如何解决它?我是否需要手动将视图控制器添加到响应程序链中?我该怎么做?

提前感谢!

回答我自己的问题以帮助在功能中偶然发现此问题的其他人。正如我所假设的那样,这个问题与响应者链有关。

我的层次结构如下:NSWindow(由NSWindowController管理)->内容视图->子视图(由NSViewController管理)

我发现响应器链在窗口控制器中结束。因此,字体面板无法将 changeFont: 消息发送到我实现它的视图控制器。

通过在窗口控制器中添加这行代码,我可以解决此问题:

self.nextResponder = self.theViewCtrl;

我仍然不明白的是为什么当我手动配置目标/操作时它不起作用。无论如何,它现在对我有用。

相关内容

  • 没有找到相关文章