4

を作成していますが、フォントを選択してもメソッド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:アプリケーション デリゲート (レスポンダー チェーンにあるはず) に同じメソッドを入れましたが、どちらも呼び出されません。私はどこかでステップを逃していますか?

4

1 に答える 1

3

答えが見つかりました(http://www.cocoabuilder.com/archive/cocoa/108016-nsfontpanel-act-on-it-own-accessory-view.html#108136)。この行を追加しました:

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

NSWindowControllerサブクラスのメソッド名に対応する変更を加えました。フォント パネルで別のフォントを選択すると、changeDefaultFont:が呼び出されます。

于 2011-05-27T20:36:15.980 に答える