gpt4 book ai didi

objective-c - NSFontPanel changeFont 未调用

转载 作者:行者123 更新时间:2023-12-03 16:45:53 26 4
gpt4 key购买 nike

我尝试在 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]);
}

此代码是从模式窗口(首选项窗口)内的 View Controller 调用的,并且字体面板打开得很好。但是,尽管我手动设置了目标和操作,但我没有得到任何更改。

这个问题与响应者链有关吗?我该如何修复它?我需要手动将 View Controller 添加到响应者链中吗?我该怎么做?

提前致谢!

最佳答案

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

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

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

通过在窗口 Controller 中添加这行代码,我可以解决该问题:

self.nextResponder = self.theViewCtrl;

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

关于objective-c - NSFontPanel changeFont 未调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27036767/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com