我有一个使用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];