validModesForFontPanel从未调用



我有一个使用NSFontPanel的应用程序。我打开字体面板如下:

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

然后我有一个-(void)changeFont:(id)sender方法,它对面板中的字体变化做出反应。这一切都很好。

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

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

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

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

有人有什么建议吗?

您没有为面板指示任何响应程序,只为管理器指示
这应该做到:

NSFontPanel* fontPanel = [fontManager fontPanel:YES];
[fontPanel setDelegate:self];    
[fontPanel makeKeyAndOrderFront:sender];    

相关内容

  • 没有找到相关文章