首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSFontManager selectedFont返回null

NSFontManager selectedFont返回null
EN

Stack Overflow用户
提问于 2012-11-29 05:29:18
回答 1查看 2.2K关注 0票数 6

好的,我已经检查了所有的S.O.和所有的Google,我都找不到我的代码有什么问题:

代码语言:javascript
复制
- (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)。有人知道我错过了什么吗?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-29 06:40:24

苹果的Documentation表示,在changeFont:中使用selectedFont可能会导致意想不到的行为,并且“强烈反对在changeFont中使用selectedFont。”从NSFontPanel获取字体的适当方法是要求NSFontManager将当前字体转换为所选字体。下面是一个正确使用NSFontPanel的示例应用程序

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

我已经删除了与您的问题无关的代码片段(例如IBOutlets到NSButtons和NSWindow)。

请注意,此示例使用ARC。

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

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

https://stackoverflow.com/questions/13614769

复制
相关文章

相似问题

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