0

Macアプリ(iOSアプリではない)用のカスタム「フォントの変更」NSPopupButtonを作成しようとしています。フォント選択の変更を検出できます:

long fontItemIndex = [fontPopup indexOfSelectedItem];
NSMenuItem *fontItem = [fontPopup itemAtIndex:(int)selectedFontItemIndex];
NSString *fontName = [selectedFontItem title];

textViewフォント名のこのNSStringを考えると、NSTextViewで選択したテキストをこの新しいフォントに実際に変更する方法がわからないようです。

私は公式のドキュメントにただ目がくらんでいます:それconvertFont:toFamily:は私が必要としているもののようです。私がこれをするとき:

NSFont *font = [NSFont fontWithName:fontName size:12.0];
[textView setFont:font];

選択したテキストだけでなく、すべてのテキストをテキストビューに設定します。しかし、私がこれを行うとき:

NSFontManager *fontManager = [NSFontManager sharedFontManager];
[fontManager convertFont:[fontManager selectedFont] toFamily:fontName];

それは何もしません。私は何が欠けていますか?

4

3 に答える 3

4

aの中にNSTextViewNSTextStorage(のサブクラスNSAttributedString)があり、。という名前の属性を変更する必要がありますNSFontAttributeName

まず、フォント属性を変更する範囲を取得します。

NSRange selection = textView.selectedRange;

次に、フォント属性を選択範囲に追加します。

NSFont *font = [NSFont fontWithName:fontName size:12.0f];
[self.textView.textStorage addAttributes:@{NSFontAttributeName: font}
  range:selection];

内容によっては、選択したフォントを取得するためにフォント名として呼び出すだけでNSPopUpButton十分なはずです。ただし、すでに行っている方法が機能しない場合は、フォントファミリ名から特定のフォントを取得する必要があります。onは、使用可能なすべてのフォントのリストを表示します。それらの1つを使用して、特定のフォントを初期化できます。fontWithName:size:titleavailableMembersOfFontFamily:NSFontManager

于 2013-03-07T10:42:17.203 に答える
0

のスーパークラスであるのsetFont:range:メソッドを見てください。NSTextNSTextView

selectedRanges(もちろん、範囲は上のプロパティから来ていますNSTextView。)

于 2013-03-02T04:07:22.587 に答える
0

テキストビューのすべてのテキストを変更するために必要なのはこれだけです。

[textview setFont:[NSFont fontWithName:@"Courier" size:14]];
于 2016-04-25T21:52:44.383 に答える