【问题标题】:Why isn't changeFont: being called from my NSFontPanel?为什么没有从我的 NSFontPanel 调用 changeFont:?
【发布时间】:2011-05-28 04:36:15
【问题描述】:

我正在创建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: 方法(它应该在响应者链中),但它也没有被调用。我在某处错过了一步吗?

【问题讨论】:

    标签: cocoa nsfontpanel


    【解决方案1】:

    我找到了答案 (http://www.cocoabuilder.com/archive/cocoa/108016-nsfontpanel-act-on-it-own-accessory-view.html#108136)。我添加了这一行:

    [[NSFontManager sharedFontManager] setAction:@selector(changeDefaultFont:)];
    

    并对我的NSWindowController 子类中的方法名称进行了相应的更改。现在,当我在字体面板中选择不同的字体时,changeDefaultFont: 会被调用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-30
      • 1970-01-01
      • 2018-07-11
      • 1970-01-01
      • 2015-08-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      相关资源
      最近更新 更多