好的,所以我已经检查过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)
所选字体的字体。谁知道我错过了什么?
由于
答案 0 :(得分:14)
Apple的Documentation表示在selectedFont
中使用changeFont:
可能会导致意外行为,并且“强烈建议不要在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);
}
我删除了与您的问题无关的代码(例如IBOutlets到NSButtons和NSWindow)。
请注意,此示例使用ARC。
另一件重要的事情是,convertFont:
的参数必须是有效的NSFont
实例。否则,即使在convertFont:
中选择了字体,NSFontPanel
也会返回nil。因此,将NSFont *font
实例变量初始化为有效的NSFont
实例非常重要。