CocoaでNSFontPanelを使用する
-
06-07-2019 - |
質問
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
}
私が間違っている可能性があることについてのアイデアはありますか?
解決
-changeFont:
を定義したオブジェクトは、レスポンダーチェーンの最初のレスポンダーまたはその上になければなりません。メソッドを定義した場所を指定していませんが、レスポンダーチェーンにないコントローラーオブジェクト上にあると想定しています。
他のヒント
これを含める:
[fontManager setTarget:self];
中心的な問題は次の行です:
[fontPanel makeKeyAndOrderFront:sender];
フォントパネルをキーウィンドウにすると、-changeFont:toなどのアクションメッセージの送信先がわかりません。
これは私の実際の実装です。キーポイントは、-(void)changeFont:(id)sender
NSFontManager *fontManager = [NSFontManager sharedFontManager];
NSFontPanel *panel = [fontManager fontPanel:YES];
[[self window] makeFirstResponder:self];
[panel orderFront:self];
単純なchangeFont:実装リファレンス-フォント処理
-(void) changeFont:(id)sender
{
//Here sender would be NSFontManager
NSFont *oldFont = [self font];
NSFont *newFont = [sender convertFont:oldFont];
[self setFont:newFont];
}
所属していません StackOverflow