2013-06-05 1 views
0

NSView에서 CMD + 및 CMD- 키보드 동작을 트랩하여 일부 사용자 정의 텍스트의 글꼴 크기를 늘리거나 줄입니다. 여러 가지 이유로 NSTextView를 단순히 사용할 수는 없습니다. 누구든지이 문제를 해결할 올바른 방법을 알고 있습니까?NSView에서 CMD + 처리

제가 알기로 그들은 메뉴 항목의 핵심 요소입니다. 나는 changeFont를 구현하여 메뉴 항목을 '활성화'할 수 있습니다. performKeyEquivalent를 구현하여 키 누르기를 트랩 할 수 있습니다. 그러나 이것은 약간의 해킹처럼 보입니다. 또한 changeFont가 호출 될 때 CMD +/-에 대한 호출이라는 사실을 해석하는 방법이 명확하지 않아서 간단히 NSFontManager를 보냅니다. 내가 잘못된 메시지를 다룰 지 궁금한가?

미리 감사드립니다.

+0

'[NSView keyDown :]'을 (를) 서브 클래 싱 한 적이 있습니까? – trojanfoe

+0

keyDown은 CMD +/-에 대해 호출되지 않습니다. 그 이유는 키의 등가물이기 때문입니다 (나는 믿습니다). 동일한 메뉴 옵션 인 Text-> Font-> Bigger/Smaller가 선택된 경우를 처리하는 방법의 문제도 해결되지 않습니다 직접. 감사합니다. – Scotty

+0

NSFontManager의'-modifyFont :'메시지는'-changeFont :'액션 메시지를 받으면 현재 폰트로 NSFontManager의'-convertFont :'메소드를 호출한다고 말합니다. 사용자 선택에 따라 수정 된 글꼴을 반환합니다. –

답변

1

게르트 (위의 주석 참조)에서 저를 분류했습니다. 내 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; 
}