2011-08-20 4 views
5

전체, 그래서 하위 클래스가 NSBox 있고 레이블 및 두 개의 imageViews 같은 subviews 있습니다. 나는 그것에 menuForEvent:을 재정의했다. 그러나 NSBox을 클릭하여 선택하고 나중에 Control + Click을 클릭하면 menuForEvent:이 호출되지 않습니다.컨트롤 + 클릭 트리거하지 menuForEvent

왜 그런지 나는 이해가 가지 않습니다.

+0

나는 테이블에서 똑같은 것을 가지고 있습니다 ... 내가 찾은 것을 당신에게 알려줄 것입니다. –

답변

1

당신은 menuForEvent를 구현해야합니다 파단 너무하고 슈퍼 뷰의 (NSBox 서브 클래스)에 이벤트를 전달 menuForEvent의 구현 :

- (NSMenu *)menuForEvent:(NSEvent *)event 
{ 
    return [[self superview] menuForEvent:event]; 
} 
나는 그것이 자동으로없이 수퍼에 이르기까지 떨어질 것이라고 가정

하위 뷰를 서브 클래 싱해야합니다. 마우스 오른쪽 버튼으로 클릭한다는 것을 알았지 만, 어떤 이유로 컨트롤 클릭이 발생하지 않습니다.

+0

이것은 실제로 고통없이 해결합니다. 감사합니다! – duncanwilcox

4

컨트롤 클릭 및 오른쪽 클릭이 NSView에서 처리되는 방식에 차이가 있습니다 (jfewtr가 지적한대로). 에 대한 상황 별 메뉴가 나타나면을 마우스 오른쪽 단추로 클릭하고 하위보기 내에있는 경우 을 클릭하고을 클릭하십시오.

은 내가이 놀랄 실제로 여기에 자세한 내용과 그것에 대해 글을 썼다 : NSView control-click quirks

가 몇 가지 잠재적 인 솔루션이 있지만, 최우선은/전체 서브 뷰 트리를 정의하는 것이 아마 최선의 선택이 아니다. 이이 동작을 하드 코딩 큰 아니지만

- (void)mouseDown:(NSEvent *)theEvent 
{ 
    if (theEvent.modifierFlags & NSControlKeyMask) 
    { 
     [NSMenu popUpContextMenu:[self menuForEvent:theEvent] withEvent:theEvent forView:self]; 
    } 
} 

, 그것을 :이 컨트롤 클릭에 대한 최상위 뷰 (당신의 NSBox 서브 클래스)에 명시 적으로 상황에 맞는 메뉴를 표시하는 것입니다 위해 나는 최선의 수정을 발견했습니다 전체 서브 뷰 트리를 조작하거나 가로 지르지 않아 문제가되는 부작용/버그가 발생할 수 있습니다.

관련 문제