2013-06-05 1 views
0

Я пытаюсь уловить действия CMD + и CMD-клавиатуры в моем NSView - для увеличения и уменьшения размера шрифта какого-либо пользовательского текста. По разным причинам я не могу просто использовать NSTextView. Кто-нибудь знает правильный способ справиться с этим?Ручка CMD + в NSView

Как я понимаю, они являются ключевыми эквивалентами для пунктов меню. Я могу «включить» пункты меню, выполнив changeFont: и я могу захватить нажатие клавиши, выполнив executeKeyEquivalent: но это кажется немного взломанным. Также, когда changeFont вызывает вызов, неясно, как я интерпретирую тот факт, что он был вызван для CMD +/-, поскольку он просто отправляет мне NSFontManager. Заставляет меня задаться вопросом, не обрабатываю ли я неправильное сообщение?

Заранее спасибо.

+0

Вы просматривали подклассы '[NSView keyDown:]'? – trojanfoe

+0

keyDown не вызывается для CMD +/-, потому что это ключевой эквивалент (я считаю). Он также не решает проблему того, как обрабатывать случай, когда выбран вариант эквивалентного меню Text-> Font-> Bigger/Smaller непосредственно. Спасибо – Scotty

+0

В сообщении '-modifyFont:' NSFontManager говорится, что когда вы получаете сообщение «-changeFont:», вы вызываете метод NSFontManager '-convertFont:' с вашим текущим шрифтом. Он вернет шрифт, модифицированный на основе выбора пользователя. –

ответ

1

Gerd (см. Комментарии выше) меня отсортировали. В моем обработчике changeFont я создаю временный шрифт размером 10, затем передаю его обратно менеджеру шрифтов и проверяет размер возвращаемого шрифта. Если он больше, чем нажимался CMD +, если он был меньше, чем CMD-.

- (void)changeFont:(id)sender 
{ 
    NSFontManager* fm = sender; 

    NSFont* fntBefore = [NSFont systemFontOfSize:10]; 
    NSFont* fntAfter = [fm convertFont:fntBefore]; 

    CGFloat delta = fntAfter.pointSize - fntBefore.pointSize; 
}