NSFontManager selectedFont returning null



好的,所以我检查了整个 S.O. 和整个谷歌,我找不到我的代码有什么问题:

- (IBAction)selectFont:(id)sender
{
    NSFontManager *fontManager = [NSFontManager sharedFontManager];
    [fontManager setDelegate:self];
    [fontManager setTarget:self];
    NSFontPanel *fontPanel = [fontManager fontPanel:YES];
    [fontPanel makeKeyAndOrderFront:sender];
}
- (void)changeFont:(id)sender
{
    NSFontManager *fontManager = [NSFontManager sharedFontManager];
    font = [fontManager selectedFont];
    NSLog(@"%@",[fontManager selectedFont]);
}
字体

面板弹出,但当我选择字体时,控制台返回字体管理器所选字体的(null)。有人知道我错过了什么吗?

谢谢

Apple的文档说,在changeFont:中使用selectedFont可能会导致意外行为,并且"强烈建议不要在changeFont:中使用selectedFont。NSFontPanel获取字体的适当方法是要求NSFontManager将当前字体转换为所选字体。下面是正确使用NSFontPanel的示例应用程序:

@interface AppDelegate : NSObject <NSApplicationDelegate>{
    NSFont *font;
}
- (IBAction)selectFont:(id)sender;
@end
@implementation AppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    font = [NSFont boldSystemFontOfSize:12];
}
- (IBAction)selectFont:(id)sender
{
    NSFontManager *fontManager = [NSFontManager sharedFontManager];
    [fontManager setDelegate:self];
    [fontManager setTarget:self];
    [fontManager orderFrontFontPanel:self];
}
- (void)changeFont:(id)sender
{
    font = [sender convertFont:font];
    NSLog(@"%@", font);
}

我已经删除了与您的问题无关的代码片段(例如 NSButtons 和 NSWindow 的 IBOutlets)。
请注意,此示例使用 ARC。

另一件需要知道的重要事情是,convertFont:的参数必须是有效的NSFont实例。否则,即使已在NSFontPanel中选择字体,convertFont:也将返回 nil 。 因此,将NSFont *font实例变量初始化为有效的NSFont实例非常重要。

相关内容

  • 没有找到相关文章