3

我有一个使用NSFontPanel. 我像这样打开字体面板:

NSFontManager *fontManager = [NSFontManager sharedFontManager];
[fontManager orderFrontFontPanel:self];
[fontManager setDelegate:self];
[fontManager setTarget:self];
[fontManager setAction:@selector(changeFont:)];

然后我有一种-(void)changeFont:(id)sender方法可以对面板中的字体更改做出反应。这一切都很好。

现在,我想禁用一些字体选项,所以我实现了协议的validModesForFontPanel方法:NSFontPanelValidation

- (NSUInteger)validModesForFontPanel:(NSFontPanel *)fontPanel {
    NSLog(@"validModesForFontPanel");
    return NSFontPanelFaceModeMask | NSFontPanelCollectionModeMask | NSFontPanelSizeModeMask;
}

但是,该方法永远不会被调用。在文档中它说:“此消息通过响应者链向上发送到实现该方法的第一个响应者。理想情况下,该对象应该是找到的第一个响应者,它也实现了 changeFont:。

我确实changeFont在这个响应者中实现,所以除非有其他我不知道的响应者,否则我不知道这条消息会发生什么。

有没有人有什么建议?

4

1 回答 1

4

您没有为面板指示任何响应者,只是为经理指示。
这应该这样做:

NSFontPanel* fontPanel = [fontManager fontPanel:YES];
[fontPanel setDelegate:self];    
[fontPanel makeKeyAndOrderFront:sender];    
于 2012-02-22T15:46:21.530 回答