2016-07-04 4 views
0

NSTableView에서 rightMouseDown 및 otherMouseDown을 감지하고 싶습니다. 나는 그것에 대해 검색하고 어떤 대답은 menuForEvent를 사용하지만 오른쪽 마우스 을 눌렀을 때 호출되었지만 nstableview에서 마우스 클릭을 감지하려고합니다. 당신이 NSTableView를 서브 클래스 경우NSTableView에서 rightMouseDown 및 ** otherMouseDown **을 (를) 감지하는 방법?

, 당신은 NSResponderrightMouseDown: 또는 otherMouseDown: 기능을 재정의 할 수

답변

2

는 방법 몇 가지가 있습니다.

NSTableView의 하위 클래스를 지정하지 않으려면 로컬 모니터를 연결할 수 있습니다. 이 로컬 모니터는 응용 프로그램에 지정된 모든 이벤트를 볼 것이므로 마우스 오른쪽 또는 다른 마우스 다운 이벤트가 발생했을 때 마우스가 테이블보기 안에 있는지 확인해야합니다.

이 방법은 당신이 (단지 NSNotificationCenter addObserverForName: 등) 필요한 removeMonitor에 전달해야 것 id 객체를 반환
[NSEvent addLocalMonitorForEventsMatchingMask:NSEventMaskRightMouseDown|NSEventMaskOtherMouseDown handler:^NSEvent * _Nullable(NSEvent * _Nonnull theEvent) { 
    if ([theEvent window] == [tableView window]) { 
     NSPoint event_location = [theEvent locationInWindow]; 
     NSPoint local_point = [[tableView superview] convertPoint:event_location fromView:nil]; 

     if (NSPointInRect(local_point, [tableView frame])) { 

     } 
    } 

    return theEvent; 
}]; 

참고.

+0

감사합니다 !!! 그것은 아주 잘 작동합니다 !! – Pocket7878