2013-03-02 28 views
0

我正在尝试为Mac应用程序(不是iOS应用程序)创建自定义的“更改字体”NSPopupButton。我可以检测字体选择的变化:在Objective-C中更改所选文本的字体C

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

鉴于这种NSString的字体的名字,我似乎无法找出如何实际在我NSTextView textView更改所选文本,这个新的字体。

我只是被official documentation所迷惑:看起来convertFont:toFamily:就是我所需要的。当我这样做时:

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

它设置文本视图中的所有文本,而不仅仅是选定的文本。但当我这样做:

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

它不会做一件事。我错过了什么?

回答

3

里面一个NSTextViewNSTextStorage(的NSAttributedString子类),你将不得不修改名为NSFontAttributeName属性。

首先要改变字体属性得到范围:

NSRange selection = textView.selectedRange; 

现在添加的字体属性选择:

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

根据您的NSPopUpButton的内容应该是足以拨打fontWithName:size:title作为字体名称以获取刚选择的字体。但是,如果你已经做的方法不起作用,你可能需要从字体名称中获取特定的字体。 availableMembersOfFontFamily:NSFontManager会给你一个所有可用字体的列表。您可以使用其中之一来初始化特定的字体。

+0

哇,这工作!感谢您的时间和清晰的解释! – 2013-03-08 01:19:14

0

这就是我需要改变我textview中的所有文本。

[textview setFont:[NSFont fontWithName:@"Courier" size:14]];