NSFontManager setTarget:不适用于模态窗口

时间:2011-11-14 12:07:25

标签: objective-c xcode cocoa

我有模态窗口。在它的控制器中我这样做:

[[NSFontManager sharedFontManager] orderFrontFontPanel:self];

它工作正常。字体管理器在我的控制器中调用changeFont:方法。

但如果我改为编写此代码:

[[NSFontManager sharedFontManager] setTarget:self];
[[NSFontManager sharedFontManager] setAction:@selector(qwe:)];
[[NSFontManager sharedFontManager] orderFrontFontPanel:self];

它不起作用。当我在字体面板中选择字体时,它不会调用qwe:method。

原因是窗口是模态的(当我显示没有模态会话的窗口时,一切正常)。问题是为什么目标 - 动作变体不适用于模态窗口?

感谢您的帮助。

1 个答案:

答案 0 :(得分:5)

我也看到了这一点。设置目标和操作不会导致调用操作方法。

这是什么工作:(1)设置委托,而不是目标,(2)命名方法changeFont,(3)不设置动作:

@property (retain) NSFont *font;

...

- (void)changeFont:(id)sender
{
    self.font = [sender convertFont:self.font];
}

- (IBAction)actionSetFont:(id)sender
{
    NSFontManager *fontManager = [NSFontManager sharedFontManager];
    [fontManager setDelegate:self];
    NSFontPanel *fp = [NSFontPanel sharedFontPanel];
    [fontManager setSelectedFont:self.font isMultiple:NO];
    [fp makeKeyAndOrderFront:self];
}