3

を使用するアプリケーションがありますNSFontPanel。次のようにフォントパネルを開きます。

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

次に-(void)changeFont:(id)sender、パネルのフォントの変更に反応するメソッドがあります。これはすべてうまく機能します。

ここで、いくつかのフォントオプションを無効にしたいので、プロトコルのvalidModesForFontPanelメソッドを実装します。NSFontPanelValidation

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

ただし、メソッドが呼び出されることはありません。ドキュメントには、「このメッセージは、メソッドを実装する最初のレスポンダーにレスポンダーチェーンを介して送信されます。理想的には、そのオブジェクトは、changeFont:も実装する最初のレスポンダーである必要があります。

私はchangeFontこのレスポンダーに実装しているので、私が知らない他のレスポンダーがいない限り、このメッセージがどうなるかわかりません。

誰か提案はありますか?

4

1 に答える 1

4

あなたは、マネージャーのためだけに、パネルのレスポンダーを示していません。
これはそれを行う必要があります:

NSFontPanel* fontPanel = [fontManager fontPanel:YES];
[fontPanel setDelegate:self];    
[fontPanel makeKeyAndOrderFront:sender];    
于 2012-02-22T15:46:21.530 に答える