我正在尝试使用NSFontPanel来允许用户更改应用程序范围的字体设置。它应该是这样的:用户点击一个按钮,弹出一个字体面板,他们选择一个字体和一个大小,并保持他们的选择。

以下代码显示了该面板:

- (IBAction)showFontMenu:(id)sender {
    NSFontManager *fontManager = [NSFontManager sharedFontManager];
    [fontManager setDelegate:self];

    NSFontPanel *fontPanel = [fontManager fontPanel:YES];
    [fontPanel makeKeyAndOrderFront:sender];
}

文档似乎建议在字体更改时调用changeFont:(id)sender方法;在我的情况下,这不会发生。

- (void)changeFont:(id)sender {
    // blah
}

关于我可能做错的任何想法?

有帮助吗?

解决方案

您定义的对象 -changeFont: on必须是响应者链中的第一个响应者或其上方。您尚未指定定义方法的位置,但我认为它位于不在响应程序链中的控制器对象上。

其他提示

包括这个:

[fontManager setTarget:self];

NSFontManager 的委托主要用于通过 -fontManager:willIncludeFont:过滤它提供给字体面板的字体。

正如kperryua所提到的, -changeFont:被发送到响应者链。启动字体菜单或其封闭视图的按钮可能是放置 -changeFont:的响应者的好地方。

您可能会找到字体处理指南比字体面板指南。

核心问题是这一行:

[fontPanel makeKeyAndOrderFront:sender];

通过将字体面板作为关键窗口,它不知道在哪里发送动作消息,如-changeFont:to。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top