我正在创建一个NSFontPanel
,但选择字体不会调用changeFont:
方法。
我在NSWindowController
子类中定义了这些方法:
- (IBAction)showFontPanel:(id)sender {
[[NSFontPanel sharedFontPanel] makeKeyAndOrderFront:self];
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
NSFont *theFont = [NSFont fontWithName:[prefs stringForKey:iepFontName] size:[prefs floatForKey:iepFontSize]];
[[NSFontPanel sharedFontPanel] setPanelFont:theFont isMultiple:NO];
[[NSFontManager sharedFontManager] setDelegate:self];
}
- (void)changeFont:(id)sender {
NSLog(@"changeFont");
}
- (NSUInteger)validModesForFontPanel:(NSFontPanel *)fontPanel {
return NSFontPanelFaceModeMask | NSFontPanelSizeModeMask | NSFontPanelCollectionModeMask;
}
字体面板显示时选择了正确的字体和大小,并且仅启用了validModesForFontPanel:
中的模式,但当我选择不同的字体时,不会调用changeFont:
方法。我的理解是changeFont:
操作消息被发送到响应器链的上游。作为测试,我在我的应用程序委托(应该在响应程序链中)中放入了一个相同的changeFont:
方法,但它也没有被调用。我是不是错过了一步?
我找到了答案(http://www.cocoabuilder.com/archive/cocoa/108016-nsfontpanel-act-on-it-own-accessory-view.html#108136)。我加了这行:
[[NSFontManager sharedFontManager] setAction:@selector(changeDefaultFont:)];
并对我的CCD_ 8子类中的方法名称进行了相应的更改。现在,当我在字体面板中选择不同的字体时,就会调用changeDefaultFont:
。