7

NSFontPanel を使用して、ユーザーがアプリケーション全体のフォント設定を変更できるようにしようとしています。次のように動作するはずです: ユーザーがボタンをクリックすると、フォント パネルがポップアップし、フォントとサイズを選択すると、その選択が保持されます。

次のコードは、パネルを示しています。

- (IBAction)showFontMenu:(id)sender {
    NSFontManager *fontManager = [NSFontManager sharedFontManager];
    [fontManager setDelegate:self];

    NSFontPanel *fontPanel = [fontManager fontPanel:YES];
    [fontPanel makeKeyAndOrderFront:sender];
}

ドキュメントは、フォントが変更されたときに changeFont:(id)sender メソッドを呼び出す必要があることを示唆しているようです。これは私の場合には起こっていません。

- (void)changeFont:(id)sender {
    // blah
}

私が間違っているかもしれないことについてのアイデアはありますか?

4

5 に答える 5

9

これを含めます:

[fontManager setTarget:self];
于 2011-09-03T22:00:01.870 に答える
2

定義したオブジェクト-changeFont:は、レスポンダー チェーンの最初のレスポンダーまたはその上にある必要があります。メソッドを定義した場所を指定していませんが、レスポンダーチェーンにないコントローラーオブジェクト上にあると思います。

于 2009-09-12T17:54:29.847 に答える
1

中心的な問題は次の行です。

[fontPanel makeKeyAndOrderFront:sender];

フォント パネルをキー ウィンドウにすることで、-changeFont: などのアクション メッセージをどこに送信すればよいかわかりません。

于 2009-09-13T11:00:40.340 に答える
1

NSFontManagerのデリゲートは、主に を介してフォント パネルに提供するフォントをフィルタリングするために存在します-fontManager:willIncludeFont:

kperryua が言及している-changeFont:ように、レスポンダー チェーンに送信されます。フォント メニューまたはそれに含まれるビューを起動するボタンは、レスポンダーを配置するのに適した場所です-changeFont:

フォント パネルガイドよりも、フォント処理ガイドの方がわずかに役立つ場合があります。

于 2009-09-13T02:08:11.863 に答える
0

これが私の実用的な実装です。重要な点は、実装した最初のレスポンダーとしてオブジェクトを作成する必要があることです- (void)changeFont:(id)sender

NSFontManager *fontManager = [NSFontManager sharedFontManager];

NSFontPanel *panel = [fontManager fontPanel:YES];
[[self window] makeFirstResponder:self];

[panel orderFront:self];

Simple changeFont: 実装リファレンス -フォント処理

-(void) changeFont:(id)sender
{
    //Here sender would be NSFontManager
    NSFont *oldFont = [self font];
    NSFont *newFont = [sender convertFont:oldFont];
    [self setFont:newFont];
}
于 2016-01-14T13:54:16.493 に答える