2013-03-02 3 views
0

Я пытаюсь создать пользовательский «Изменить шрифт» NSPopupButton для Mac App (не приложение iOS). Я могу обнаружить изменения в выборе шрифта:Изменение шрифта выделенного текста в Objective-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

Внутри NSTextView является NSTextStorage (подкласс 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

Ничего себе, это сработало! Благодарим вас за время и четкое объяснение! –

0

Посмотрите на метод setFont:range: на NSText, суперкласс NSTextView.

(диапазоны, конечно, исходить от selectedRanges собственности на NSTextView.)

0

Это все, что мне нужно, чтобы изменить весь текст в моем текстовом виде.

[textview setFont:[NSFont fontWithName:@"Courier" size:14]]; 
Смежные вопросы