2011-02-07 2 views
3

내 자신의 그리기 및 렌더링을 수행하기 위해 사용자 지정 NSViewNSMenuItem으로 설정했습니다. 그러나 NSMenuItem에 지정된 'keyEquivalent'는 응답하지 않는 것 같습니다. 드로잉 및 액션 처리 자체 처리해야하지만 이해할 수없는 일을 상관없이 keyEquivalent 요청을 캡처 할 수 없습니다. NSApplication의 sendEvent를 하위 클래스로 만들려고했지만 내 앱이 NSStatusBarItem (LSUIElement)이고 NSEventTrackingRunLoopMode (메뉴가 다운 된 경우)의 이벤트가 NSApplication의 sendEvent에 도달하지 않아 작동하지 않습니다.NSMenuItem 사용자 지정보기가 keyEquivalent에 응답하지 않습니다

그럼 내가 사용 해봤이 내가 컨트롤러로 메인 메뉴의 대리자를 설정 한 경우에도 호출되지 않습니다으로

- (BOOL)menuHasKeyEquivalent:(NSMenu *)menu forEvent:(NSEvent *)event target:(id *)target action:(SEL *)action 

이 중 하나가 작동하지 않습니다.

누구나 사용자 정의보기를 사용할 때 NSMenuItems에서 'keyEquivalent'이벤트를 캡처하는 방법에 대한 아이디어가 있습니까?

감사합니다.

+0

문서에 명시 적으로 언급 된 "키보드 등가물 및 유형 선택 키 정상 및 제목을 계속 사용하십시오." 그러나 이것은 사실 인 것처럼 보이지 않습니다. – strange

답변

1

나는이 게시물이 오래되었고이 게시물을 오래 전에 보았지만 해결 방법을 찾으려고 할 때 여러 번 동일한 문제가 발생하여 게시물이 여러 번 나왔기 때문에 나에게 맞는 것을 공유 할 것이라고 생각했습니다.

NSApplication을 서브 클래 싱하고 sendEvent를 재정 의하여 문제를 해결할 수있었습니다. 당신은 당신이 성공하지 못했다고 언급 했으므로 그 차이점은 모르지만 NSStatusBarItem의 NSMenu에서 이벤트를 가로채는 데 아무런 문제가 없습니다. 내 키 상당 부분은 모두 int이므로 키를 확인하고 적절한 항목을 찾은 다음 NSMenuItem 동작을 명시 적으로 호출합니다.

-(void)sendEvent:(NSEvent *)theEvent 
{ 
    if([theEvent type] == NSKeyUp){ 
     NSInteger mod = ([theEvent modifierFlags] & NSDeviceIndependentModifierFlagsMask); 

     if(mod == NSCommandKeyMask) { 
      NSInteger keyEquiv = [[theEvent characters] isEqualToString:@"0"] 
      ? 10 
      : [[theEvent characters] integerValue]; 
      if(keyEquiv > 0) { 
       NSMenuItem *item = [[(MyAppDelegate *)[self delegate] myStatusMenu] itemAtIndex:(keyEquiv - 1)]; 
       if([[item keyEquivalent] integerValue] == keyEquiv){ 
        [[item target] performSelector:[item action] withObject:item]; 
       } 
      } 
     } 
    } 
    [super sendEvent:theEvent]; 
} 
+0

흠 ... 작동 할 수도 있지만 NSApplication 하위 클래스를 만들어야한다는 생각은 들리지 않습니다. 코코아와 AppKit이 어떻게 디자인되었거나 작동하지 않는 것입니다. – Jay

+0

@Jay, 나는 똑같은 일을 할 필요가있다. 그리고 Crutt의 대답이 그것을 달성하는 유일한 방법 인 것 같다. 내 코드 외부에서 설정을 조정하여 구현하는 것보다 더 기쁩니다. 어쨌든, 관련 메모 : http://stackoverflow.com/questions/27144113/subclass-nsapplication-in-swift – Charlesism

관련 문제