2014-09-15 5 views
1

내 사용자 지정 NSWindow 클래스에서 Child가있는 부모보기 (창의 contentView로 설정)가 있습니다. 내 응용 프로그램 전체에 걸쳐 하위보기를 하위보기에 추가했습니다. 모든 하위보기는 mouseDown 응답을 완벽하게 수신하는 것으로 보입니다. 그러나 버튼을 클릭하면 하위 뷰 위의 패널 슬라이드를 가져 오려고했습니다 (응용 프로그램에서 slidingOverlay라고 부름). 하위 뷰에 slidingOverlay 하위 뷰 (이후에 더 많은 하위 뷰가 포함됨)를 추가하면 하위 뷰에 모두 전달되므로 해당 요소를 클릭 할 수 없습니다.다른 NSWindow를 겹칠 때 NSEvents가 NSView를 통과합니다.

몇 세부 정보 :

  • 나는 모두 NSEvents을받는 아이 뷰의 결과로, 아이 뷰와 부모 뷰 모두의 서브 뷰로 slidingOverlay를 오버레이 노력했다.
  • 슬라이딩 오버레이는 분명히 보이고, 레이어가 지원되며, 단색을 가지고 있어도 불투명하지 않습니다 (반투명? 애플의 용어가 명확한 지 확실하지 않음). 아마 이것은 기원인가? 나는 오히려 코코아를 처음 사용합니다.
  • 세 뷰 모두 실제로 레이어 백업 (Parent, Child 및 slidingOverlay)입니다.
  • 세 뷰 모두 프로그래밍 방식으로 만들어졌습니다.
  • 나는 Child를 위해 (NSView *) hitTest : (NSPoint) aPoint를 재정의하고, slidingoverlay의 subviews로 NSEvent를 전달하는 작업을 시도했다. 그러나이 방법은 다소 해킹처럼 보이기 때문에 어떤 slidingOverlay 하위 뷰에서 이벤트를 수신할지 미리 결정해야합니다. slidingOverlay가 표시되는 동안 모든 slidingOverlay 하위보기가 클릭 수를 얻을 수 있도록하고 하위 하위보기는 모두 무시하기를 바랍니다.

요약하면 요약하면 contentView가 Parent 인 NSWindow가 있습니다. 부모는 하위 뷰 (NSButtons, 드롭 다운, 맞춤 클래스 등)가있는 하위 하나를 모두 수신합니다. slidingOverlay는 현재 상태에서 하위보기로 하위에 추가됩니다 (사물에 대한 내 파악에 따라 정상적으로 작동해야 함). 가시성을 전환 할 수 있습니다. 마우스 오버시 NSEvents가 slidingOverlay로 바뀌고 해당 하위 항목이 하위 하위보기로 전달됩니다. 예를 들어 100,400 점을 클릭하면 펼쳐집니다 (하위의 직접 하위보기가 표시되지만 보이는 slidingOverlay 레이어 아래) 확장됩니다.

NSView (하위 뷰 포함)가 다른 뷰의 꼭대기에있을 때 부모 또는 기본 뷰를 위해 "솔리드"및 클릭 가능으로 인식되는 방식은 무엇입니까?

답변

0

새 NSWindow (slidingOverlay 대체)가 작동하는 것처럼 보입니다 (Child를 추가로 레이어링하는 것이 유리합니다). 그래도 NSEvents가 특정 개수의 하위 뷰가 첨부 된 후에 왜 관통하는지 알 수는 없습니다 ...

0

해당 배열의 하위 뷰 배치와 관련이 있습니다.

하위보기가 겹칠 때마다 나중에 추가 된 하위보기가 마우스 이벤트를 사용합니다. 레이어가 지원되는보기의 zPosition은 도움이되지 않습니다. 다음 방법을 사용하여 하위보기를 정렬하여이 문제를 해결할 수 있습니다.

- (void)sortSubviewsUsingFunction:context: 
관련 문제