내 애플 리케이션의 윈도우는 세 개의 윈도우로 구성된 스플릿 뷰를 가지고 있습니다; 가장 왼쪽 창은보기 기반 개요보기를 호스트합니다.NSWindow.contentView.hittest()가 NSOutlineView의 서브 뷰에 도달하지 않습니다.
개요보기의 아무 곳이나 클릭하면 클릭 한 계층에서 맨 아래의 하위보기를 확인하려고합니다. 즉, 어떤 행, 어떤 셀 및 궁극적으로 어떤 셀의 하위 뷰 (컨트롤)가 클릭되었는지입니다.
mouseDown(with:)
을 호스팅보기 컨트롤러에서 덮어 쓰려고 시도했지만 호출되지 않았습니다. 나는 아웃 바운드 뷰가 어떻게 든 이벤트를 호깅하는 것 같아 대신 서브 클래스 자체에서 직접 NSOutlineView
메서드를 재정의하기로 결정했습니다. 이 작동합니다. 그러나, 거기에서 내가 윤곽보다 계층 구조 아래로 더 이상 갈 수 없어 자체를 참조하십시오
클래스 MyOutlineView : NSOutlineView {
override func mouseDown(with event: NSEvent) {
if let view = self.window?.contentView?.hitTest(event.locationInWindow) {
Swift.print("\(view.className)")
}
}
... 인쇄 :
MyOutlineView는인 MyModule을.
hittest()
에 대한 설명서를 읽
가 먼 지정된 점을 포함 (자신을 포함) 뷰 계층의보기의 자손, 또는 전무를 돌려 점에있는 경우 보기 밖에 완전히. 이 메소드는 NSWindow 객체가 주로 으로 사용하여 어떤 뷰가 마우스 다운 이벤트를 수신해야하는지 결정합니다. 이 메소드를 호출 할 필요는 거의 없지만 은 뷰 객체가 서브 뷰에서 마우스 다운 이벤트 을 숨기도록하기 위해이를 대체하려고 할 수 있습니다. 이 메서드는 숨겨진 뷰를 무시합니다.
개요보기의 최상위 하위보기를 어떻게 테스트 할 수 있습니까?
고맙습니다. 나는 https://instagram.com/p/BY-57nMFUvy/에서 내 개요보기에이 코드를 적용하는 작업을하고 있었다. 링크 된 저장소는 뷰 컨트롤러에서'mouseDown (with :)'를 사용합니다. –
거기에있는 주석에서 제안한 것처럼, 나는 아웃 라인 뷰에서'validateProposedFirstResponder : forEvent :'를 오버라이드하여 특정'NSView' 서브 클래스에 대해'true'를 리턴했다. –
당신은'mouseDown (with :)'와 컨트롤러에 대해 옳았습니다. – Willeke