首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未调用NSFontPanel changeFont

未调用NSFontPanel changeFont
EN

Stack Overflow用户
提问于 2014-11-20 18:04:56
回答 1查看 660关注 0票数 2

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

我让它在另一个应用程序中正常工作,我只是复制并粘贴了代码,但由于某种奇怪的原因,changeFont方法现在不被调用。代码如下:

代码语言:javascript
复制
- (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]);
}

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

这个问题是否与响应器链有关?我怎么才能修复它?是否需要手动将视图控制器添加到响应器链中?我该怎么做呢?

提前感谢!

EN

回答 1

Stack Overflow用户

发布于 2014-11-21 04:48:49

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

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

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

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

代码语言:javascript
复制
self.nextResponder = self.theViewCtrl;

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27036767

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档