2012-02-20 10 views
2

私はNSFontPanelを使用するアプリケーションを持っています。 は、私はこのようなフォントパネルを開きます。validModesForFontPanelは決して呼ばれません

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を実装してくださいこのレスポンダでは、私が気付いていない他のレスポンダがない限り、私はこのメッセージに何が起こるか分かりません。

誰にも提案はありますか?

答えて

2

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

NSFontPanel* fontPanel = [fontManager fontPanel:YES]; 
[fontPanel setDelegate:self];  
[fontPanel makeKeyAndOrderFront:sender];  
+0

こんにちはJPed、お返事ありがとうございました。すべてが「NSFontManager」を通過したことは私の理解であったが、私は間違っていたと思う。とにかく、上記のコードは 'NSFontPanel'の代理人が' NSWindowDelegate'のインスタンスでなければならず、 'self'は' NSViewController'のサブクラスであるため動作しません。 '警告:' TextViewController * const __strong 'を互換性のない型' id '' – pajevic

+0

のパラメータに送ります。私はそれが動作しなかったと言ったときに私は少し速かった。私が警告を受けるという事実にもかかわらず、実際にはそうです。これはあなたが遭遇したことですか? – pajevic

+0

私はついにそれを理解しました。私のクラスが 'NSWindowDelegate'プロトコルを実装していなかったので警告が来ました。私はちょうどこれのすべてがもう少し良く文書化されたことを願っています。 D – pajevic

関連する問題